Pygame小球屏幕左右弹跳功能实现求助
Pygame圆形左右反弹实现方案
只需要添加1个变量并修改移动逻辑,就能实现循环反弹,无需大幅重构代码:
修改步骤
- 在变量初始化部分添加速度控制变量:
x_speed = -1(初始向左移动,对应原代码的x_pos -=1) - 替换原有的移动判断代码,改为边缘碰撞检测并反转速度,然后统一更新位置:
原代码中的这段:
if x_pos > 20: # do not let the ball roll out of the screen x_pos -= 1
替换为:
# 碰到左右边缘时反转速度 if x_pos <= r or x_pos >= width - r: x_speed *= -1 x_pos += x_speed
修改后的完整代码
import pygame pygame.init() size = width, height = 400, 300 screen = pygame.display.set_mode(size) x_pos = 380 y_pos = 280 r = 20 x_speed = -1 # 新增:控制移动方向和速度,-1向左,1向右 running = True while running: # game cycle screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.draw.circle(screen, (0, 255, 0), (x_pos, y_pos), r) # 修改:边缘碰撞检测+速度反转,统一更新位置 if x_pos <= r or x_pos >= width - r: x_speed *= -1 x_pos += x_speed pygame.time.delay(5) # delay in milliseconds pygame.display.flip() pygame.quit()
说明
- 用
x_speed变量控制移动方向,初始值-1和原代码的x_pos -=1效果一致,保证初始移动方向不变 - 碰撞判断用
width - r和r,确保圆形边缘碰到屏幕边缘时就反弹,不会出现部分圆形超出屏幕的情况 - 每次循环直接根据当前速度更新位置,不需要条件判断是否移动,逻辑更简洁
内容的提问来源于stack exchange,提问作者Faz
相关产品推荐
相关产品推荐

