Autor |
Beitrag |
cuejo
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Sa 01.04.06 22:10
Hi Leute,
Erst einmal möchte ich sagen, dass ich noch ziehmlich neu hier bin und auch noch nicht sehr erfahren bin, was die Programmierung angeht.
Zu meinem Programm: Ich habe mal versucht ein simples Programm zu schreiben, das die Gravitation simuliert. Das habe ich durch zwei Geschwindigkeiten (horizontal und vertikal) gelößt, die ich unabhänig voneinander betrachte. Auf die Vertikalkomponente wirkt noch dazu die Gravitation. Aber schaut doch am besten selbst.
Zur Visualisierung zeichne ich einen Kreis mit Canvas, den man mit der Maus aufnehmen und herumschleudern kann.
Allerdings habe ich noch einige Probleme in Bezug auf die Simulierung der Reibung:
Schaltet man sie aus springt der Ball immer höher obwohl er eigentlich immer auf die Maximalhöhe kommen sollte. Und ich finde den Fehler nicht. Bitte kann mir da jemand helfen.
Weitere Bugs:
-prallt der Ball an der rechten Seite ab scheint er schneller zu werden
-die horizontale Reibung wirkt bei niedrigen Geschwindikeiten zu abruppt und der Ball hat dann plötzlich keine Horizontalbewegung mehr
Ich hoffe ihr könnt mir da ein bisschen helfen. :roll: Moderiert von Gausi: Topic aus Freeware Projekte verschoben am So 02.04.2006 um 14:23
|
|
LonghornUser
Beiträge: 796
|
Verfasst: Sa 01.04.06 23:39
Ich kann dir zwar bei deinem Problem net helfen, muss aber sagen, dass mir das Programm echt gut gefällt. Kompliment Vor allem mit wie wenig Code man sowas hinbekommen kann. Net schlecht
|
|
Marc.
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 01.04.06 23:45
und noch ein bug:
hält man den ball direkt unter der leiste des programmes un lässt ihn anschließend los, so bleibt er dort hängen
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 02.04.06 00:32
Hallo!
cuejo hat folgendes geschrieben: | Allerdings habe ich noch einige Probleme in Bezug auf die Simulierung der Reibung: [...] Bitte kann mir da jemand helfen. [...] Ich hoffe ihr könnt mir da ein bisschen helfen. |
Ich möchte nur mal kurz drauf hinweisen, dass in den Thread der Freeware-Sparte bitte nicht die Programmierprobleme besprochen werden. Dafür bitte Threads in den Programmiersparten erstellen! Danke!
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 02.04.06 07:42
Mir gefällt nicht, dass der Ball, wenn er auf dem Boden liegt, halb aus dem Bild draußen ist (die Show-Tip-Checkbox ist auch nur so halb zu sehen). Außerdem sollte das Programm sofort auf die Änderung des Ortes reagieren (IMHO).
Sonst nicht schlecht!
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 02.04.06 10:10
ich würde sagen, dass ist eher opensource, deshalb hier ein minimaler vorschlag:
Delphi-Quelltext 1: 2: 3: 4:
| function ball.wall(value:real):real; begin if fri then result:=value*0.8 else result:=value; end; |
du machst ja vert := wall(vert);
also geht das auch so:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure ball.wall(var value: real) begin if fri then value := value * 0.8; end; |
dann machst du wall(vert) und fertig
sonst recht gut, außer dass der ball im weltraum an der decke hängenbleibt.
(das liegt an der reibung, vielleicht sollte die dann abgeschaltet werden )
|
|
DelphiAnfänger
Beiträge: 112
Win XP, Firefox 2.0, IE6
Delphi 5 Prof., Delphi 2005 PE
|
Verfasst: So 02.04.06 13:45
kannst du mal die exe datei hochstellen kann die mit Delphi 5 nicht erzeugen
|
|
Marc.
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 02.04.06 14:08
die exe befindet sich im zipordner
edit: hab sie hochgeladen vermutlich lag sie nur im meinem ordner vor, weil ich zuvor den code compilert habe
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Marc. am So 02.04.06 14:55, insgesamt 1-mal bearbeitet
|
|
Ironwulf
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: So 02.04.06 14:42
öhm bei mir is die nich in dem ordner
|
|
cuejo
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: So 02.04.06 21:12
Danke für die Kritik, Anregungen und natürlich auch fürs Lob !
NoTVerYEvilPzYchO hat folgendes geschrieben: | und noch ein bug:
hält man den ball direkt unter der leiste des programmes un lässt ihn anschließend los, so bleibt er dort hängen |
Hab ich behoben. Es lag daran, dass die Kugel immer wieder an die Selbe stelle replaced wurde:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| if (posy-r)=(top+1) then begin vert:=wall(vert); vert:=-1*vert; posy:=top+r+1; end; |
Christian S. hat folgendes geschrieben: |
Ich möchte nur mal kurz drauf hinweisen, dass in den Thread der Freeware-Sparte bitte nicht die Programmierprobleme besprochen werden. Dafür bitte Threads in den Programmiersparten erstellen! Danke!
Grüße
Christian |
Ok. Hab ein Thread geöffnet.
GTA-Place hat folgendes geschrieben: | Mir gefällt nicht, dass der Ball, wenn er auf dem Boden liegt, halb aus dem Bild draußen ist (die Show-Tip-Checkbox ist auch nur so halb zu sehen). |
Komisch, so ein Problem hab ich nicht.
GTA-Place hat folgendes geschrieben: | Außerdem sollte das Programm sofort auf die Änderung des Ortes reagieren (IMHO). |
Wie meinst du das?
F34r0fTh3D4rk hat folgendes geschrieben: | ich würde sagen, dass ist eher opensource, deshalb hier ein minimaler vorschlag:
Delphi-Quelltext 1: 2: 3: 4:
| function ball.wall(value:real):real; begin if fri then result:=value*0.8 else result:=value; end; |
du machst ja vert := wall(vert);
also geht das auch so:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure ball.wall(var value: real) begin if fri then value := value * 0.8; end; |
dann machst du wall(vert) und fertig |
Ja, klar das kann man machen. Es wäre aber nur eine Formalität, oder bringt das irgentwelche Vorteile?
DelphiAnfänger hat folgendes geschrieben: | kannst du mal die exe datei hochstellen kann die mit Delphi 5 nicht erzeugen |
Hab ich. Hier die neue Version ohne an-der-Deke-hängenbleib:
Einloggen, um Attachments anzusehen!
|
|
wunsiedler
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: So 02.04.06 21:14
Bei mir a net. Hätts gern mal ausprobiert.
EDIT
Augen auf, da isses ja
|
|
GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 03.04.06 19:16
Das eine hat sich erledigt, funktioniert jetzt (war selbe Fehler wie hängen bleiben) und das andere Problem hab ich bei XP-Style hier. Bissl flimmern tut's auch.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 03.04.06 19:46
der vorteil liegt in der performance, das merkst du aber erst wenn du versuchst 1000000 bälle zu bewegen ^^
|
|
cuejo
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Mo 03.04.06 21:49
ok, gut das ich das nicht vor habe
|
|
cuejo
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Di 04.04.06 22:39
So die neue Version ist fertig:
fixed Bugs:
- Die Kugel spring jetzt ohne Reibung mehr oder weniger gleich hoch.
Sie flackert auch nicht mehr (benutze kreisförmiges Shape zur Darstellung).
Animation ist jetzt viel flüssiger.Kugel wird auch nicht mehr schneller, wenn sie an der rechten Bande abprallt.
Big THX an Simon Joker. Er hat mir die Augen geöffnet...
added Features:
- Man kann jetzt Reibung an Wand und Luftwiderstand seperat ein/ausschalten.
Radius kann verändert werden.
Man kann entscheiden ob man die Kugel mit der Maus "fangen" will oder ob sie zur Maus "springt"
Allerdings gibts jetzt einen kleinen Schönheitsfehler : Die Kugel zittert, wenn sie am Boden liegt. Wer mir helfen will kann das hier machen.
Einloggen, um Attachments anzusehen!
|
|
Zyklame
Beiträge: 41
Erhaltene Danke: 1
Win 7 Professional
Delphi XE, Visual Studio 2010
|
Verfasst: Mi 05.04.06 11:42
Zitat: | Sie flackert auch nicht mehr (benutze kreisförmiges Shape zur Darstellung) |
Wenn das shape größer ist flackert es und zwar ziemlich stark.
Eine möglichkeit wäre es die Kugel (als Bild und nicht als Shape) mit der win API Funktion
BitBlt auf der Form zu verschieben
siehe www.dsdt.info/tipps/?id=348
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.04.06 12:02
oder du verwendest double buffering
der ball hört aber irgendwie nicht auf zu hüpfen
|
|
GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Do 06.04.06 19:49
Wenn du die Reibung abstellst ist klar, dass er nicht aufhört zu hüpfen. Sonst mit Reibung ist es nur der Bug, den cuejo angesprochen hat.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
cuejo
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Do 06.04.06 20:53
Hab jetzt geschafft das zittern mithilfe einer genaueren Kollisionsabfrage zu unterbinden. Nun ja unter seltenen umständen kanns immer noch zittern, aber dann längst nicht mehr so extrem wie es sonst der fall war.
Sobald ich noch das flackern abgestellt habe werde ich die neue Version hochladen. Doch das bereitet mir noch ziehmiches Kopfzerbrechen. BitBlt() scheint in meiner Delphi Version irgendwie nicht zu funktionieren, oder ich bin einfach nur zu doof dazu. Ich hab schon herumexperimentiert, die Kugel in ein TBitmap zu zeichnen und anschließend in einem Image auszugeben, aber das hab ich nicht hinbekommen...
Doublebuffering klappt prima (das hab selbst ich hinbekommen ), aber dann werden alle checkboxes usw. schwarz wenn man mit der maus drüberfährt...
Wäre sehr dankbar wenn mir irgendjemand zu diesem Thema ein Link zu einem Tutorial oder ähnichem posten kann (ich hab schon gesucht aber nix gescheites gefunden).
|
|
Danniolo
Beiträge: 693
|
Verfasst: Do 06.04.06 21:17
Ich hab in deinen Code mal ein "manuelles" DoubleBuffering eingebaut.
Jetzt sollte alles (bis aufs Vergrößern) Flackerfrei laufen
Einloggen, um Attachments anzusehen!
|
|