Den Schläger treffen
Teil des Abschnitts Projekte der Pygame-Journey von Coddy. Lektion 14 von 31.
Wenn der Ball einen Schläger berührt, sollte er in die andere Richtung zurückfliegen. ball.colliderect(right) sagt dir, ob sie sich berühren.
Das Vorzeichen umzudrehen, vx = -vx, birgt eine Falle. Wenn sich der Ball im nächsten Frame noch im Schläger befindet (er hat das Ende des Schlägers erwischt oder der Schläger ist auf ihn zugefahren), wird das Vorzeichen immer wieder umgedreht: Der Ball zittert im Schläger.
Lege die Richtung fest, statt das Vorzeichen umzudrehen. abs(vx) ist vx ohne Vorzeichen, also immer positiv:
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)Vom linken Schläger fliegt der Ball immer nach rechts und vom rechten Schläger immer nach links, egal wie viele Frames sie sich berühren.
Aufgabe
MittelNach dem Abprallen an der Wand: Wenn der Ball mit left kollidiert, setze vx = abs(vx); wenn er mit right kollidiert, setze vx = -abs(vx).
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
left.y -= 6
if keys[pygame.K_s]:
left.y += 6
if keys[pygame.K_UP]:
right.y -= 6
if keys[pygame.K_DOWN]:
right.y += 6
left.clamp_ip(screen.get_rect())
right.clamp_ip(screen.get_rect())
ball.x += vx
ball.y += vy
if ball.top <= 0 or ball.bottom >= 400:
vy = -vy
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), left)
pygame.draw.rect(screen, (235, 80, 80), right)
pygame.draw.rect(screen, (255, 196, 0), ball)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Projekte
2Pong für zwei
Der BallAbprallenÜbe selbstständig: Pygame-Playground