在我的乒乓球游戏中,只要有人得分(球向左或向右发球),球的位置就会重置到屏幕中间,并且在移动之前会等待一秒钟。在那一秒钟里,我进行了一个小动画。
我的问题是:如果我在动画的中间暂停游戏,即使没有更新任何对象并且只绘制了暂停文本,时间也会持续滚动。如果我等待足够的时间,动画就会正确停止在我取消游戏暂停之后。这就是我的意思。这是球更新:
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
。我该如何解决?抱歉,如果这很难理解,我将在需要时发布其余代码。
好吧,好像您只是从当前时间中减去某个事件发生的时间一样。如果那是您检查自事件以来已经经过了多少时间的方法,那么游戏是否已暂停并不重要。如果事件发生,然后您将游戏暂停了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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句