Golpea la paleta
Parte de la sección Proyectos del Journey de Pygame de Coddy. Lección 14 de 31.
Cuando la pelota toca una paleta, debería dirigirse hacia el otro lado. ball.colliderect(right) te indica si se tocan.
Cambiar el signo, vx = -vx, tiene una trampa. Si la pelota todavía está dentro de la paleta en el siguiente fotograma (si golpeó el extremo de la paleta o si la paleta se movió sobre ella), el signo vuelve a cambiar una y otra vez: la pelota tiembla dentro de la paleta.
Establece la dirección en lugar de cambiar el signo. abs(vx) es vx sin su signo, así que siempre es positivo:
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)Al salir de la paleta izquierda, la pelota siempre va hacia la derecha, y al salir de la paleta derecha, siempre hacia la izquierda, sin importar cuántos fotogramas estén en contacto.
Desafío
IntermedioDespués del rebote en la pared, cuando la pelota choque con left, establece vx = abs(vx); cuando choque con right, establece vx = -abs(vx).
Pruébalo tú mismo
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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Proyectos
2Pong para dos
La pelotaRebotePractica por tu cuenta: Playground de Pygame