![]() |
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? |
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. |
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 =) |
Re: Pong - Problem bei der Ballkollision
Delphi-Quellcode:
Puh. Jetzt bin ich aber mit meinem Latein am Ende. :roteyes:
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; |
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??? |
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. |
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! |
Re: Pong - Problem bei der Ballkollision
@Anhang:
Ja, dann musst du wohl die Schleife benutzen, damit die Kollision schon vorher abgefangen wird. |
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 |
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. |
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