【问题标题】:Stop time without freezing the program停止时间而不冻结程序
【发布时间】:2013-10-06 04:11:30
【问题描述】:

在我的乒乓球比赛中,每当有人得分(球向左或向右出球)时,球的位置都会重置到屏幕中间,并在移动前等待一秒钟。在那一秒钟内,我正在播放一个小动画。

我的问题是这样的:如果我在动画中间暂停游戏,即使没有更新任何对象并且只绘制了暂停文本,时间也会滚滚而来。如果我等待足够的时间,动画在我取消暂停游戏后立即停止。这就是我的意思。这是球更新:

def update(self, dt):
        now = pygame.time.get_ticks() / 1000
        # if time elapsed since the ball got out >= BALL_WAIT_TIME
        if now - self._spawn_time >= BALL_WAIT_TIME:
            self.rect = self.calcnewpos(dt)
            self.handle_collision()
        # spawn animation
        else:
            step = 255 / (FPS * BALL_WAIT_TIME)
            value = int(self._frame * step)
            rgb = (value, value, value)
            self._draw_ball(rgb)
            self._frame += 1

来自http://pygame.org/docs/ref/time.html#pygame.time.get_ticks

pygame.time.get_ticks()

返回自调用 pygame.init() 以来的毫秒数。在 pygame 初始化之前,它总是为 0。

因此,即使在游戏暂停时没有绘制或更新任何内容,pygame.time.get_ticks() 仍将返回自 pygame.init 以来经过的时间。我该如何解决这个问题?抱歉,如果这有点难以理解,如果需要,我会发布其余代码。

【问题讨论】:

    标签: python animation time pygame


    【解决方案1】:

    看起来好像您只是从当前时间中减去某些事件发生的时间。如果这是您检查事件发生后已过去多少时间的方法,那么游戏是否已暂停并不重要。如果事件发生后您将游戏暂停 10 分钟,那么事件发生后始终是 10 分钟。

    因此,考虑到这一点,您需要一些方法来仅在游戏处于活动状态时计算时间。也许球可以有一个属性来说明球离开多长时间,并且只有在比赛没有暂停时才增加它。

    编辑:类似:

    class Ball:
        def spawn(self):
            self.sinceSpawn = 0
    
        def update(self, dt):
            if not gamePaused:
                self.sinceSpawn += dt
            if self.sinceSpawn >= BALL_WAIT_TIME:
                pass #Do something here
    

    【讨论】:

    • 这有点复杂,但你的回答让我走上了正确的道路。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多