我正在开发一个使用pygame和Raspberry Pi的激光标签游戏项目。在游戏中,我需要一个后台计时器来跟踪游戏时间。目前我正在使用以下内容来执行此操作,但似乎无法正常工作:
pygame.timer.get_ticks()
我的第二个问题是重启游戏时重置此计时器。游戏应该重新启动,而不必重新启动程序,我想这可能只是重置计时器。
简而言之,我需要一个后台计时器变量,并且能够在while循环中随时重置它。
我是python和pygame的真正初学者,但是这个问题的解决方案将极大地促进我的知识和项目的进展。任何帮助都将受到高度赞赏。
答案 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