如何让Pygame中的弹跳小球在数秒后停止弹跳?
如何让Pygame中的小球在数秒后停止弹跳?
你的代码里小球会一直弹跳是因为每次碰撞地面时速度完全反转,没有能量损耗。要实现数秒后停止弹跳,我们需要加入时间控制和弹跳能量衰减的逻辑。以下是修改后的完整代码:
import pygame as pg pg.init() class Ball: def __init__(self): self.y = 250 self.x = 250 self.vel_y = 0 self.jumpspdy = 0 self.start_time = pg.time.get_ticks() # 记录游戏启动时间 self.stop_after = 5000 # 5秒后开始停止弹跳(单位:毫秒) self.bounce_decay = 0.8 # 弹跳衰减系数,值越小停得越快 self.min_vel = 1 # 速度小于这个值时停止弹跳 def move(self): # 获取当前时间与启动时间的差值 elapsed_time = pg.time.get_ticks() - self.start_time # 还没到停止时间,正常弹跳;到时间后加入衰减逻辑 if elapsed_time < self.stop_after: self.vel_y += 1 if self.vel_y > 20: self.vel_y = 20 if self.y > 450: self.vel_y = -self.vel_y self.y += self.vel_y else: # 超过停止时间,开始衰减弹跳 if abs(self.vel_y) > self.min_vel: self.vel_y += 1 if self.vel_y > 20: self.vel_y = 20 if self.y > 450: # 碰撞地面时速度乘以衰减系数 self.vel_y = -self.vel_y * self.bounce_decay self.y += self.vel_y else: # 速度足够小时,让小球停在地面 self.vel_y = 0 self.y = 450 def draw(self): pg.draw.circle(screen, (255, 0 , 0), (self.x, self.y), 25) screen = pg.display.set_mode((500, 500)) ball = Ball() clock = pg.time.Clock() fps = 50 run = True while run: for i in pg.event.get(): if i.type == pg.QUIT: run = False screen.fill((0, 0, 0)) ball.move() ball.draw() pg.display.update() clock.tick(fps) pg.quit()
关键改动说明:
- 时间跟踪:用
pg.time.get_ticks()记录游戏启动时间,计算已运行时长,判断是否到达停止弹跳的时间点 - 能量衰减:当到达指定时间后,小球碰撞地面时速度会乘以
bounce_decay系数,模拟能量损失,弹跳高度逐渐降低 - 停止条件:当速度绝对值小于
min_vel时,直接将速度设为0,并固定小球在地面位置,彻底停止弹跳
你可以根据需求调整stop_after(停止倒计时)、bounce_decay(衰减速度)和min_vel(停止阈值)这几个参数,达到你想要的效果。
内容的提问来源于stack exchange,提问作者DiamondKnight
相关产品推荐
相关产品推荐

