Menu
CoddyTech

Den Schläger treffen

Lektion 32 von 40 im Kurs Spiele mit Pygame erstellen von Coddy.

Wenn der Ball einen Schläger berührt, sollte er in die andere Richtung zurückfliegen. ball.colliderect(right) zeigt dir, ob sie sich berühren.

Das Vorzeichen umzukehren, vx = -vx, hat einen Haken. Wenn sich der Ball im nächsten Frame noch im Schläger befindet (er hat das Ende des Schlägers getroffen oder der Schläger ist auf ihn zugefahren), wird das Vorzeichen immer wieder umgekehrt: Der Ball zittert im Schläger.

Lege die Richtung fest, anstatt das Vorzeichen umzukehren. abs(vx) ist vx ohne sein Vorzeichen, also immer positiv:

if ball.colliderect(left):
    vx = abs(vx)
if ball.colliderect(right):
    vx = -abs(vx)

Am linken Schläger fliegt der Ball immer nach rechts und am rechten Schläger immer nach links, egal wie viele Frames sie sich berühren.

challenge icon

Aufgabe

Mittel

Nach dem Abprallen von 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()
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground