← Все вопросы
Как сделать понг (Pong) на pygame — мячик отскакивает от стен и ракеток?
8
Решил для практики написать пинг-понг на двоих. Ракетки управляются и рисуются. Не пойму, как заставить мяч летать и правильно отскакивать от верха/низа и от ракеток. Сейчас он просто улетает за экран.
1 ответ
13
✓ Принятый ответ — помог автору
Мячу нужны не только координаты, но и скорость по каждой оси (bx_speed, by_speed). Отскок = смена знака соответствующей скорости.
bx, by = 320, 240
bx_speed, by_speed = 4, 4
ball = pygame.Rect(bx, by, 16, 16)
while running:
# ... события ...
ball.x += bx_speed
ball.y += by_speed
# отскок от верха и низа
if ball.top <= 0 or ball.bottom >= HEIGHT:
by_speed = -by_speed
# отскок от ракеток (left_paddle, right_paddle — это Rect)
if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
bx_speed = -bx_speed
# гол: мяч ушёл за левый/правый край
if ball.left <= 0:
right_score += 1
ball.center = (WIDTH//2, HEIGHT//2) # в центр
if ball.right >= WIDTH:
left_score += 1
ball.center = (WIDTH//2, HEIGHT//2)
Суть: от стен — переворачиваем вертикальную скорость, от ракеток — горизонтальную, за боковой край — гол и возврат мяча в центр. Используй Rect и его свойства .top/.bottom/.left/.right — так короче и понятнее.
Ваш ответ
Войдите, чтобы ответить на вопрос.