Colpisci la racchetta
Lezione 32 di 41 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
MedioFai rimbalzare la palla sulle palette.
- Dopo il rimbalzo contro il muro, quando la palla collide con
left, impostavx = abs(vx). - Quando collide con
right, impostavx = -abs(vx).
Premi «Gioca» e intercetta la palla con la paletta destra: rimbalzerà indietro. Poi premi «Verifica».
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()
Tutte le lezioni di Crea giochi con Pygame
1Il ciclo di gioco
Apri una finestraRiempi lo sfondo4Due giocatori e una pallina
La pallinaRimbalzoEsercitati da solo: Playground Pygame