Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pong - Problem bei der Ballkollision (https://www.delphipraxis.net/82080-pong-problem-bei-der-ballkollision.html)

.chicken 10. Dez 2006 20:39

Re: Pong - Problem bei der Ballkollision
 
Also entweder ich hab nur n totales Brett vorm Kopf...

Ne also mein Problem is ja, dass ich Pro Ball_berechnen Prozedur die ich aufrufe den Ball ja z.B. um X + 50 und Y + 70 oder sowas verschiebe, wenn danach der Ball schon mitten im Spielbrett ist, kann ich nichtmehr prüfen auf welcher Kante er denn aufgekommen waere...verstehste was ich meine? ^^

Kansnte vielleicht mal n Codebeispiel schreiben wie dus machen wuerdestr, wenns nich zuviel verlangt is?

Cöster 10. Dez 2006 20:51

Re: Pong - Problem bei der Ballkollision
 
Ach so meinste das. Aber bevor das passiert wäre der Ball doch schon längst von der Ecke abgeprallt (es sei denn, du bewegst ihn wirklich um 70 und 50 Pixel auf einmal). Um die Kollision mit der Ecke wirst du also nicht drum rumkommen. Es gibt 3 mögliche Kollisionen:

1. auf waargerechte Kante (einfach)
2. auf senkrechte Kante (auch einfach)
3. auf Ecke (schwerer)

Aber wenn du's realistisch machen willst, musst du auch diese 3. Kollision berücksichtigen.

.chicken 10. Dez 2006 20:58

Re: Pong - Problem bei der Ballkollision
 
Ja aber mein Problem besteht darin rauszufinden welche der 3 Moeglichkeiten nun zutrifft, denn der Ball wird ja wie erwaehnt jedes mal um viele Pixel bewegt (damit er auch Geschwindigkeit erhaelt)!

Gibts ne Moeglichkeit die Richtung der Bewegung als Winkel anzugeben nich als X und Y-Koordinate? dann waer das sicher n bissl einfacher!!!

Haste sonst ne Idee wie das geht oder irgendwer anders?

Danke vielmals dass du dich so damit auseinandersetzt =)

Cöster 10. Dez 2006 21:23

Re: Pong - Problem bei der Ballkollision
 
Delphi-Quellcode:
if ObererKugelrand.Y < Schlägerunterkante.Y then
   if EntfernungVomKugelmittelpunktZurEcke < Kugel.Radius then
      Eckenkollision
   else if (Kugel.Mittelpunkt.X < RechteKanteSchläger.X) and (Kugel.Mittelpunkt.X > LinkeKanteSchläger.X) then
      Unterkantenkollision
   else if (LinkerKugelrand.X < RechterSchlägerrand.X) then
      RechteKantenKollision
   else if (RechterKugelrand.X > LinkerSchlägerrand.X) then
      LinkeKantenKollision
   else
      GarKeineKollision;
Puh. Jetzt bin ich aber mit meinem Latein am Ende. :roteyes:

.chicken 11. Dez 2006 06:36

Re: Pong - Problem bei der Ballkollision
 
Delphi-Quellcode:
if ObererKugelrand.Y < Schlägerunterkante.Y then
   if EntfernungVomKugelmittelpunktZurEcke < Kugel.Radius then //dazu hab ich nochmal ne grafik angehaengt, funktioniert so glaub ich auch nich ganz richtig, das is mir aber erstmal auch nich das wichtigste...
      Eckenkollision
   else if (Kugel.Mittelpunkt.X < RechteKanteSchläger.X) and (Kugel.Mittelpunkt.X > LinkeKanteSchläger.X) then
      Unterkantenkollision
   else if (LinkerKugelrand.X < RechterSchlägerrand.X) then
      RechteKantenKollision
   else if (RechterKugelrand.X > LinkerSchlägerrand.X) then
      LinkeKantenKollision
   else
      GarKeineKollision;

D.h. bei deinem Beispiel duerfte ich den Ball nie schneller als der Radius bewegen oder??? Sonst waer nichtmehr gewaehrleistet dass das alles funktioniert glaub ich..

Da muss es doch auch omnch ne andere Moeglichkeit geben oder???

Cöster 11. Dez 2006 07:54

Re: Pong - Problem bei der Ballkollision
 
Ich seh gerade, dass die Anfangsgeschwindigkeit des Balles schon zwischen 3 und 11 :shock: Pixel pro Timer-Intervall liegt. Ich würde stattdessen lieber das Timer-Intervall runterstellen (ca. 20). Dann kannst du eine niedrigere Startgeschwindigkeit wählen. Wie hoch ist denn dein Timer-Intervall?

Eine andere Möglichkeit gäbe es auch: Wenn die Geschwindigkeit z.B. 10 beträgt, in Ball_berechnen ne Schleife von 1 bis 10 laufen lassen, und immer nur um 1 verschieben, Kollisionsabfrage, um 1 verschieben, Kollisionsabfrage usw.

PS: Du hast den Anhang vergessen.

.chicken 11. Dez 2006 14:03

Re: Pong - Problem bei der Ballkollision
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mein Intervall is so schon auf 20 ^^

Aber das mit der Schleife probier ich mal...danke! Da seh ich nurnoch das Problem, dass ich ja 2 unteschiedliche x und y werte hab aber sie ja in einer Schleife unterbringen muss aber das krieg ich irgendwie hin....

Den Anhang haeng ich jetzt nochma dran!

Cöster 11. Dez 2006 14:27

Re: Pong - Problem bei der Ballkollision
 
@Anhang:

Ja, dann musst du wohl die Schleife benutzen, damit die Kollision schon vorher abgefangen wird.

.chicken 11. Dez 2006 14:48

Re: Pong - Problem bei der Ballkollision
 
Argh nichmal mit der Schleife krieg ich das hin, weil ich ja nur um ganze Werte verschieben kann...

Jetzt hab ich Richtung.X = 10 und Richtung.Y = 7 z.B...jetzt würd ich ne Schleife mit 10 Wiederholungen machen und jedesmal X um 1 und Y um Richtung.Y / Richtung.X aber das waer dann ja gerundet, d.h es wird ungenau und wenn Richtung.Y / Richtung.X z.B. 0,3 waer wuerde Richtung.Y ja zu null...

Verstehste mein Problem? :D:D:D
Boah is das kompliziert...wie wird sowas denn bei komplexeren Sachen gelöst??? Is die Bewegung mit z.B. DelphiX besser oder einfachrer zu realisieren?

MfG

Cöster 11. Dez 2006 15:00

Re: Pong - Problem bei der Ballkollision
 
Speicher doch die Position des Balles in einem reellen Typ.

Keine Ahnung, wie das mit DelphiX aussieht, ich hab bisher auch immer alles mit PaintBox und Co. gemacht. Glaub aber kaum, dass DelphiX dir diese Arbeit abnimmt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Seite 3 von 5     123 45      

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