In einem typischen Pong-Spiel sollte der Ball korrekt von den Schlägern abprallen. Unter bestimmten Umständen kann es bei Spielern jedoch zu einem seltsamen Verhalten kommen, bei dem der Ball am Rand des Schlägers entlang wackelt und nicht richtig springt.
Wenn der Ball mit dem Schläger im Inneren kollidiert Auf herkömmliche Weise wird seine Richtung wie folgt umgekehrt:
if ball.colliderect(paddleLeft): move_x *=-1 if ball.colliderect(paddleRight): move_x *=-1
Wenn der Ball jedoch mit der Ober- oder Unterseite des Paddels kollidiert, kann der Ball leicht eindringen das Paddel. Im nächsten Bild wird die Kollision immer noch erkannt, was zu einer weiteren Richtungsänderung führt. Dies führt zu einer Zick-Zack-Bewegung entlang der Paddelkante.
Um dieses Problem zu lösen, gibt es zwei praktikable Ansätze:
1. Legen Sie die Richtung basierend auf der Paddelseite fest
Anstatt die Richtung bei jeder Kollision umzukehren, passen Sie die Richtung basierend darauf an, auf welche Seite des Paddels der Ball trifft:
if ball.colliderect(paddleLeft): move_x = abs(move_x) if ball.colliderect(paddleRight): move_x = -abs(move_x)
Dieser Ansatz stellt sicher Der Ball prallt wie erwartet von der Vorderseite des Schlägers ab.
2. Passen Sie die Ballposition nach einer Kollision an
Alternativ können Sie die Position des Balls ändern, um ihn nach einer Kollision korrekt zu platzieren:
if ball.colliderect(paddleLeft): move_x *= -1 ball.left = paddleLeft.right if ball.colliderect(paddleRight): move_x *= -1 ball.right = paddleRight.left
Bei dieser Methode wird der Ball automatisch direkt außerhalb der des Schlägers platziert Kante, wodurch das Zickzackverhalten verhindert wird.
Das obige ist der detaillierte Inhalt vonWarum wackelt mein Tischtennisball auf dem Schläger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!