Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Geschwindigkeit umkehren (https://www.delphipraxis.net/171532-geschwindigkeit-umkehren.html)

DelphiUser1 20. Nov 2012 22:51

AW: Geschwindigkeit umkehren
 
Hat nicht noch Jemand eine Lösung.
Der Code von Bummi lässt die Kreise in die selbe Richtung zurückprallen aus der sie kamen, aber wie bereits gesagt, ich will eine Einfallswinkel=Ausfallswinkel Kollision und zudem müsste das Bug Problem behoben werden: Wenn man den Block zu schnell bewegt, bleiben die Kreise darin hängen :/

Medium 20. Nov 2012 23:15

AW: Geschwindigkeit umkehren
 
Es wurden doch etliche Lösungsansätze geposted, und sogar ein gutes Stück Code verlinkt. Mach dich doch erstmal an die Umsetzung dieser Ideen (es sind die richtigen, sei versichert), und wenn dabei konkrete Probleme auftauchen, reden wir hier weiter.

Bummi 20. Nov 2012 23:24

AW: Geschwindigkeit umkehren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Durch die Geschwindigkeit bekommst Du wie gesagt bei einem Treffer in der Auswertung für x und y Überschneidungen. Ein recht brauchbarer Weg könnte es sein statt der Region die Du jetzt verwendest 4 Regions je 1 Pixel hoch(horizontal) bzw. breit(vertikal) und Kantenlänge - Geschwindigkeit * 2 , zentriert auf den Kanten, in der anderen Dimension zu verwenden.

Dann sollte ein CombineRegion nacheinander über die 4 Seiten die richtige Auswertung zulassen.

DelphiUser1 20. Nov 2012 23:50

AW: Geschwindigkeit umkehren
 
Hmm das klingt schon sehr gut, aber wie soll ich das denn umsetzten. Ehrlich gesagt, fällt mir da jetzt so direkt keine konkrete Umsetzungsmöglichkeit in Delphi ein :?
Tut mir leid, dass ich nicht so der Profi bin, ich tue schon alles Mögliche, um mein Delphi Wissen zu steigern :oops:

Bummi 21. Nov 2012 00:17

AW: Geschwindigkeit umkehren
 
Du kannst behelfsweise auch mit InterSectRect an der Stelle weiterabeiten, dann sind es halt 4 Rects statt 4 Regions ,der Kreis durch das umhüllende Rect etwas verfälscht abgefragt, bei kleineren Radien fällt das aber kaum auf.
Wenn Du Dir die Regions ansehen willst, kannst Du Dich dort http://msdn.microsoft.com/de-de/libr...(v=vs.85).aspx mal durchhangeln ... DeleteObj nicht übersehen.

Bjoerk 21. Nov 2012 11:46

AW: Geschwindigkeit umkehren
 
Ich hab mir deinen Code jetzt nicht näher angeschaut, aber bei solchen Kollusionen gibt es i.d.R. folgende Punkte zu beachten.
1.) Der Timer läuft auf, weil er sehr schnell eingestellt ist. Das kann man leicht beheben, indem man am Anfang der OnTimerRoutine den Timer disabled und am Schluß der Routine wieder auf enabled setzt.
2.) Die Bälle, Kugeln ect. laufen ineinander. Das ist schon etwas schwieriger. Hier kann man mit einer function IsFreePlace(X, Y) prüfen, bevor man die Kugel an eine bestimmte Stelle setzt.
3.) Die Kollusion wird nicht erkannt, weil der Timer sehr schnell eingestellt ist und auch hier laufen die Kugeln manchmal ineinander. Da kann man zum Beispiel einen Zug im Voraus denken und mit diesen Koordinaten auf Kollusion prüfen (in meinem Code die NextBalls).
4.) Wenn dir der elastische Stoß mit Berücksichtigung der Massen zu kompliziert ist bzw. wenn alle Kugeln die gleiche Masse haben, kannst du die Geschwindigkeiten der beiden Kugeln einfach austauschen.
5.) Bei Kollusion mit einer Wand wird die entsprechende Geschwindigkeit umgedreht.

Gruß
Thomas

PS.: Etwas einfacher zu handhaben als InterSectRect ist:

http://www.delphi-treff.de/tipps/gra...e-kollidieren/


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz