Heim >Backend-Entwicklung >Python-Tutorial >Warum wackelt mein Tischtennisball, anstatt vom Schläger abzuprallen?

Warum wackelt mein Tischtennisball, anstatt vom Schläger abzuprallen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 03:42:01359Durchsuche

Why Does My Pong Ball Wobble Instead of Bouncing Off the Paddle?

Der Ball springt im Pong-Spiel nicht vom Schläger ab

In einem klassischen Pong-Spiel steuern die Spieler Schläger, um einen Ball über den Bildschirm hin und her zu lenken. Einige Benutzer sind jedoch auf ein Problem gestoßen, bei dem der Ball manchmal nicht vom Paddel abprallt, sondern wackelt und über die Oberfläche rutscht.

Ursache:

Dieses Problem tritt auf wenn der Ball mit der Ober- oder Unterkante des Schlägers kollidiert. Es ist richtig, diese Kollision zu erkennen und die Richtung des Balls umzukehren. Manchmal dringt der Ball jedoch so tief in das Paddel ein, dass er bei seiner nächsten Bewegung im Kollisionsbereich bleibt. Folglich wird eine zweite Kollision erkannt, die die Richtung des Balls erneut umkehrt und einen Zick-Zack-Effekt entlang der Vorderseite des Paddels erzeugt.

Lösungen:

  1. Rückwärts Richtung statt Geschwindigkeit zu multiplizieren:

Anstatt die Geschwindigkeit des Balls mit -1 zu multiplizieren, was zu einer Richtungsumkehr führt, wird ihm eine positive Geschwindigkeit zugewiesen, wenn er das rechte Paddel trifft, und eine negative Geschwindigkeit, wenn Wenn es auf das linke Paddel trifft, wird ein gleichmäßigerer Sprung erzeugt.

if ball.colliderect(paddleLeft):
    move_x = abs(move_x)
if ball.colliderect(paddleRight):
    move_x = -abs(move_x)
  1. Position des Balls anpassen:

Alternativ können Sie die Position des Balls anschließend anpassen Eine Kollision kann dafür sorgen, dass es innerhalb der Grenzen bleibt. Wenn das rechte Paddel getroffen wird, bewegen Sie die rechte Kante des Balls zur linken Seite des Paddels und umgekehrt beim linken Paddel.

if ball.colliderect(paddleLeft):
    move_x *= -1
    ball.left = paddleLeft.right
if ball.colliderect(paddleRight):
    move_x *= -1
    ball.right = paddleRight.left

Das obige ist der detaillierte Inhalt vonWarum wackelt mein Tischtennisball, anstatt vom Schläger abzuprallen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn