You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:30:31