在我的乒乓球比赛中,每当有人得分(球向左或向右移动)时,球位置将重置到屏幕中间并在移动前等待一秒钟。在那一秒钟我有一个小动画正在进行。
我的问题是:如果我在动画中间暂停游戏,即使没有更新任何对象而且只绘制了暂停文本,时间也会继续滚动。如果我等了足够的时间,动画在我取消暂停游戏后就停止了。这就是我的意思。这是球更新:
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
以来经过的时间。我怎么解决这个问题?对不起,如果有点难以理解,我会在必要时发布其余的代码。
答案 0 :(得分: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