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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:25:17