重置pygame的计时器

时间:2013-11-16 20:49:05

标签: python timer pygame raspberry-pi

我正在开发一个使用pygame和Raspberry Pi的激光标签游戏项目。在游戏中,我需要一个后台计时器来跟踪游戏时间。目前我正在使用以下内容来执行此操作,但似乎无法正常工作:

pygame.timer.get_ticks()

我的第二个问题是重启游戏时重置此计时器。游戏应该重新启动,而不必重新启动程序,我想这可能只是重置计时器。

简而言之,我需要一个后台计时器变量,并且能够在while循环中随时重置它。

我是python和pygame的真正初学者,但是这个问题的解决方案将极大地促进我的知识和项目的进展。任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

你不一定需要Pygame - time.time()应该和pygame.time.get_ticks()一样好,虽然它报告自Unix Epoch以来的秒数,而不是自Pygame初始化以来的毫秒数。

您想要衡量自上次重置以来的时间(或自游戏开始以来,您可以将其视为第一次重置)。你得到的两个函数都返回了自任意参考点以来经过的时间。实现此目的的最简单方法是保留变量t0。此变量将保留上次重置(或游戏开始)时的时间值。

这是一个无限循环并不断打印这样一个计时器值的例子,每当它达到3秒时重置它:

# import the builtin time module, this is always available
import time

# initialize the t0 variable, "starting the stopwatch"
t0 = time.time()

while True:
  # calculate the time since some reference point (here the Unix Epoch)
  t1 = time.time()

  # calculate the difference, i.e. the time elapsed
  dt = t1 - t0

  if dt >= 3:
    print "Three seconds reached, resetting timer"
    t0 = t1
  else:
    print "Time elapsed is", dt, "seconds"

如果您想了解Python的面向对象功能,这是练习的好机会。上述行为可以巧妙地封装在Stopwatch类中,例如使用get_seconds()reset()方法。

如果您编写这样的类,您的高级时序逻辑代码可以非常简单和可读:

my_timer = Stopwatch()
print my_timer.get_seconds(), "seconds have elapsed since start/reset"
my_timer.reset()

底层实现的细节隐藏在Stopwatch类的代码中。

答案 1 :(得分:1)

调用pygame.init()后,pygame计时器启动。 因此,假设您运行程序一次,然后在同一运行中开始制作不同的游戏会话,那么您可以使用参考变量来跟踪计时器并重置它。
例如:

#your game
import pygame
from pygame import time as T
#do your stuffs
pygame.init()
while True: #this loop never ends and you want to reset timer in this loop if I am not wrong.
    if(new_session):
        tim_var=T.get_ticks()
        new_session=0

    #do your stuffs
    print 'time elaspsed in this session upto now '+str(T.get_ticks()-tim_var)+' millisecs'

    if(game_ended):
        new_session=1
        #restart_your_new_game by resetting your variables or whatever