Colpisci la racchetta
Lezione 32 di 40 del corso Crea giochi con Pygame di Coddy.
Quando la palla tocca una racchetta, dovrebbe dirigersi nella direzione opposta. ball.colliderect(right) ti dice se si toccano.
Invertire il segno, vx = -vx, nasconde un’insidia. Se al frame successivo la palla è ancora dentro la racchetta (ha urtato l’estremità della racchetta oppure la racchetta le si è spostata addosso), il segno viene invertito ancora, e ancora: la palla vibra dentro la racchetta.
Imposta la direzione invece di invertirla. abs(vx) è vx senza il segno, quindi è sempre positivo:
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)La palla si allontana sempre verso destra dalla racchetta sinistra e verso sinistra da quella destra, indipendentemente da quanti frame rimane a contatto.
Sfida
MedioDopo il rimbalzo contro la parete, quando la palla entra in collisione con left, imposta vx = abs(vx); quando entra in collisione con right, imposta vx = -abs(vx).
Provalo tu
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()
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Crea giochi con Pygame
1Il ciclo di gioco
Apri una finestraRiempi lo sfondo4Due giocatori e una palla
La pallaRimbalzoEsercitati da solo: Playground Pygame