2

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

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

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. 我该如何解决这个问题?抱歉,如果这有点难以理解,如果需要,我会发布其余的代码。

4

1 回答 1

2

看起来好像您只是从当前时间中减去某些事件发生的时间。如果这是您检查事件发生后已过去多少时间的方法,那么游戏是否已暂停无关紧要。如果事件发生,然后您暂停游戏 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
于 2013-09-30T10:35:15.023 回答