Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重置pygame';s定时器_Python_Timer_Pygame_Raspberry Pi - Fatal编程技术网

Python 重置pygame';s定时器

Python 重置pygame';s定时器,python,timer,pygame,raspberry-pi,Python,Timer,Pygame,Raspberry Pi,我正在做一个激光标签游戏项目,它使用pygame和Raspberry Pi。在游戏中,我需要一个后台计时器来跟踪游戏时间。目前,我正在使用以下方法进行此操作,但似乎无法正常工作: pygame.timer.get_ticks() 我的第二个问题是重新启动游戏时重置计时器。游戏应该重新启动,而不必重新启动程序,我想只有重置计时器才能完成 简而言之,我需要的是有一个后台计时器变量,并且能够在while循环中随时重置它 我是python和pygame的真正初学者,但是这个问题的解决将极大地提升我的知

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

pygame.timer.get_ticks()
我的第二个问题是重新启动游戏时重置计时器。游戏应该重新启动,而不必重新启动程序,我想只有重置计时器才能完成

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


我是python和pygame的真正初学者,但是这个问题的解决将极大地提升我的知识和项目的进度。任何帮助都将不胜感激。

您不一定需要Pygame来完成此任务--
time.time()
应该与
Pygame.time.get_ticks()
一样工作,尽管它报告的是自Unix纪元以来的秒数,而不是自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的面向对象特性,这是一个很好的练习机会。上述行为可以巧妙地封装在
秒表
类中,例如使用
get_seconds()
reset()
方法

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

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

底层实现的详细信息隐藏在
秒表
类的代码中。

您不一定需要Pygame来完成此任务--
time.time()
应该与
Pygame.time.get_ticks()一样有效,尽管它报告的是Unix纪元后的秒数,而不是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的面向对象特性,这是一个很好的练习机会。上述行为可以巧妙地封装在
秒表
类中,例如使用
get_seconds()
reset()
方法

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

my_timer = Stopwatch()
print my_timer.get_seconds(), "seconds have elapsed since start/reset"
my_timer.reset()
底层实现的详细信息隐藏在
Stopwatch
类的代码中。

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

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


事实上你错了。不必在while循环中重置。
你想要一个游戏的计时器,并且你想在程序启动后运行游戏多次,但由于计时器是由pygame.init初始化的[即,在循环之外],那么你怎么能为一个游戏会话获得计时器呢?这就是你所问的问题?抱歉,英语太差了。我的意思是,我的程序运行在一个while循环中,我必须在这个while循环中用一个命令重置计时器。不管怎样,你都可以得到答案,但是
if(游戏结束)
检查您当前的游戏会话是否结束,或者是否满足您想要重置计时器的任何条件,然后设置
新建会话
…下次循环运行时,检查
新建会话
是否设置,如果是,则在
tim_var
中创建一个参考计时器,并将
新建会话
重置为
0
。。。因此,在游戏结束之间的整个持续时间内,你可以通过简单地用参考时间减去当前时间来获得经过的时间。[无需重置]实际上你错了。不必在while循环中重置。
你想要一个游戏的计时器,并且你想在程序启动后运行游戏多次,但由于计时器是由pygame.init初始化的[即,在循环之外],那么你怎么能为一个游戏会话获得计时器呢?这就是你所问的问题?抱歉,英语太差了。我的意思是,我的程序运行在一个while循环中,我必须在这个while循环中用一个命令重置计时器。不管怎样,你都可以得到答案,但是
if(游戏结束)
检查您当前的游戏会话是否结束,或者是否满足您想要重置计时器的任何条件,然后设置
新建会话
…下次循环运行时,检查
新建会话
是否设置,如果是,则在
tim_var
中创建一个参考计时器,并将
新建会话
重置为
0
。。。因此,在游戏结束之间的整个持续时间内,您只需用参考时间减去当前时间即可获得经过的时间。[无需重置]