Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nochmal Pong ;-) (https://www.delphipraxis.net/91906-nochmal-pong-%3B.html)

.chicken 11. Mai 2007 17:53


Nochmal Pong ;-)
 
Also ich hatte ja vor langer Zeit schonmal versucht ein Pong zu realisieren, bei dem der Ball an allen vier Seiten kollidieren kann. Damals bin ich daran gescheitert, nun habe ich es eigentlich recht gut realisiert (wie ich finde). Muss nochn bissl ausgebessert werden aber sonst passts.

Jetzt zu meinem Problem. Wenn ich die Schläger bewege, und sie damit in die Position des Balls reinbewege, dann fliegt der Ball einfach durch den Schläger, weil er nicht an der Außenkante kollidiert.
(Die Kollision wird ja erst nach dem Bewegen des Schlägers aufgerufen, wo der Ball dann schon mittem im Schläger ist!)

Wie kann ich das verhindern? Wer ne Idee?

Danke schonmal ;-)

Khabarakh 11. Mai 2007 18:04

Re: Nochmal Pong ;-)
 
Du lässt den Ball vom Schläger abprallen, sobald sich die Bounding-Boxes (kleinstes Rechteck, das ein Objekt ganz umschließt; beim Rechteck also ebenjenes, beim Kreis ein Quadrat mit dem Kreisdurchmesser als Seitenlänge) überlappen. Programmieren musst du dafür fast nichts, denn Delphi nimmt dir fast die gesamte Prüfung mit der Funktion Delphi-Referenz durchsuchenIntersectRect ab.

.chicken 11. Mai 2007 18:40

Re: Nochmal Pong ;-)
 
Hm, danke erstmal für die Antwort.
Aber so leicht ist das leider nicht. Ich kann damit dann zwar überprüfen, ob die Rechtecke sich überschneiden, aber ich muss den Ball dann ja auch richtig Bewegen lassen, dh wenn ich nach oben bewege muss der Ball schwung nach oben bekommen.

Aber gut ich denke da faellt mir dann was zu ein, ich versuch des einfach mal!

Khabarakh 11. Mai 2007 19:34

Re: Nochmal Pong ;-)
 
Wenn sich sowohl Paddle als auch Ball gleichzeitig bewegen, ist das gar nicht so leicht zu entscheiden, da ja nur eine diskrete Bewegung vorliegt; es wäre sicherliche das Einfachste, in diesem Fall den Ball immer zurück ins Feld spielen zu lassen. In allen anderen Fällen kannst du die nächstliegende Kante des Paddles errechnen, an dieser musst du den Geschwindigkeitsvektor des Balls spiegeln.

.chicken 11. Mai 2007 19:38

Re: Nochmal Pong ;-)
 
Also ich lös das n bisl anders.
Im Timer überprüf ich immer ob die Tasten gedrückt werden um den Schläger zu bewegen.
Wenn zB nach oben gedrückt wird, dann prüf ich ob sich der Ball und der Schläger nun überschneiden. Ist das der Fall, dann prüf ich zuerst ob der Ball sich ggn die Schlägerrichtung bewegt um ihn dann zu reflektieren, oder ob er sich mit dem Schläger bewegt.

In beiden Fällen wird er dann auf die Position des Schlägers gesetzt (ausser er sitzt schon oben aner Wand, dann wird der Schläger auf Posi des Balls gesetzt) und dann wird seine Geschwindigkeit noch etwas erhöht, weil er ja angeschoben wird!

So klappts im Groben, muss nurnoch n paar Fehler ausbessern.

Kann man doch gut so lösen oder? Hat wer nen besseren Vorschlag?

Khabarakh 11. Mai 2007 19:58

Re: Nochmal Pong ;-)
 
Wie wäre es mit meinem :cry: :mrgreen: ? Ich würde es selbst genau wie beschrieben lösen, bei jedem Kontakt noch die Geschwindigkeit des Paddles zu der des Balls addieren, Verschieben sollte man auch nichts müssen.

.chicken 11. Mai 2007 20:04

Re: Nochmal Pong ;-)
 
Häh, aber wenn der Ball zB schon mitten im Paddle ist, dann kann ich doch nicht einfach nur seine Bewegung ändern. Er wird doch vom Paddle vor sich hergeschoben und dann noch Schwung hinzugegeben.

Khabarakh 11. Mai 2007 20:08

Re: Nochmal Pong ;-)
 
Wie gesagt, wenn sich das Paddle bewegt, wird der Ball in meiner Variante immer zur Spielfeldmitte reflektiert, um eben solchen Problemen zu entgehen. Da der Ball horizontal dabei nicht abgebremst wird, wird er im nächsten Frame das Paddle auf jeden Fall wieder verlassen haben.

.chicken 11. Mai 2007 20:14

Re: Nochmal Pong ;-)
 
Häh, vielleicht versteh ich dich eifnach nur falsch....

Also wenn das Paddle sich bewegt, würdest du den Ball einfach immer mitbewegen oder wie?

Aso, jetzt versteh ich wie du meinst, nein also bei mir ises so, dass der Ball sich auch oberhalb des Paddles bewegen kann.
Deswegen kann ich ihn nicht einfach immer abprallen lassen!

Khabarakh 11. Mai 2007 20:23

Re: Nochmal Pong ;-)
 
Zitat:

Zitat von .chicken
Aso, jetzt versteh ich wie du meinst, nein also bei mir ises so, dass der Ball sich auch oberhalb des Paddles bewegen kann.

Achso, dann baust du wohl keinen exakten Pong-Klon? Bei einem solchen würde ich wegen der paar winzigen Flächen oben und unten wirklich nicht zu viele Gedanken machen, das ließe sich exakt nur durch tiefergreifende mathematische Berechnungen lösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Seite 1 von 2  1 2      

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