2017-06-17 56 views
-2

我一直在做一个游戏;其中一个主要组件是一个倒数计时器 - 但是这个计时器被延迟了,我无法推断出原因。我希望它每秒减少一次,但是它似乎每6秒减少一次。倒数计时器以延迟方式递减?

这里是我怎么也设置定时器起来:

loops = 0 
minute = 1 
tens = 0 
ones = 0 

#Timer Calculation 
    screen.blit(cloudSky, (0,0)) 
    if go == True: 
     loops = loops + 1 
     if (loops % 60)== 0: 
      if ones == 0 and tens == 0 and minute != 0: 
       tens = 6 
       ones = 0 
       minute = minute - 1 

      if ones == 0 and tens != 0: 
       ones = 9 
       tens = tens - 1 

      elif ones != 0: 
       ones = ones - 1 

      elif tens == 0 and ones == 0: 
       tens = 5 
       minute = minute - 1 

      elif ones == 0 and tens != 0: 
       tens = tens - 1 


      if minute <= 0 and tens == 0 and ones == 0: 
       go = False 

我打印在屏幕上用下面的代码:

#Draw Clock Time 
time = timeFont.render(str (minute)+ ":" + str (tens) + str (ones), True, WHITE) 
screen.blit(time, (750,10)) 

任何帮助,不胜感激!

回答

0

这可能是由于您依赖这个计时器计算精确到每秒60次而造成的。如果您每10秒更新一次,则每6秒实时增加1秒。你可能应该使用类似time模块来更精确地计时。

import time 

# To remember current time 
timer = time.time() # timer = 1497737106.913825 

# To read time since the clock started 
seconds_passed = time.time() - timer # seconds_passed = 11.117798089981079 

# To get a tuple containing calculated time (minutes, seconds, etc.) 
time_passed = time.gmtime(seconds_passed) 
# time_passed = time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, 
#    tm_hour=0, tm_min=0, tm_sec=11, tm_wday=3, tm_yday=1, tm_isdst=0) 
# As you can see year returned is 1970 because 0 means start of Unix Epoch time 
# but you don't use it anyway 

由于它的命名元组,你可以使用索引:

time_passed[0] # 1970 

或名称:

time_passed.tm_year # 1970 

https://docs.python.org/3/library/time.html#time.time