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

Pygame游戏重启时计时器无法重置问题求助

Pygame赛车游戏计时器重启异常解决方案

问题核心是你的计时器计算依赖全局启动时间,而非每次重启时的新基准时间——只重置self.elapsed_time = 0没用,因为底层计算还是用程序启动时的初始时间戳。

以下是具体修复步骤:

  • 给游戏类新增self.start_time属性,专门记录每次游戏启动/重启时的Pygame全局时间(用pygame.time.get_ticks()获取)
  • 修改restart()方法:除了重置self.elapsed_time,还要同步更新self.start_time为当前时间
  • 调整计时器的实时计算逻辑:每次更新时,用当前全局时间 - self.start_time得到正确的已流逝时间

代码示例对比

错误逻辑(重启后计时不重置):

class RacingGame:
    def __init__(self):
        self.start_time = pygame.time.get_ticks()  # 只初始化一次,永远是程序启动时间
        self.elapsed_time = 0
        self.game_active = True

    def update_timer(self):
        if self.game_active:
            self.elapsed_time = pygame.time.get_ticks() - self.start_time  # 始终用初始时间计算

    def restart(self):
        self.elapsed_time = 0  # 仅重置累计值,底层基准时间未变
        self.game_active = True

修正后逻辑:

class RacingGame:
    def __init__(self):
        self.start_time = pygame.time.get_ticks()
        self.elapsed_time = 0
        self.game_active = True

    def update_timer(self):
        if self.game_active:
            self.elapsed_time = pygame.time.get_ticks() - self.start_time

    def restart(self):
        self.game_active = True
        self.start_time = pygame.time.get_ticks()  # 关键:更新为重启时的当前时间
        self.elapsed_time = 0

另外,当玩家到达终点时,记得把self.game_active设为False,这样计时器会停止计算;重启时再激活即可。

内容的提问来源于stack exchange,提问作者Allan Örtegren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:27:34