我正在尝试创建一个简单的游戏,其中的重点是在一定的时间内收集尽可能多的块,比如10秒.如何让秒表在程序开始时开始滴答,当它达到10秒时,做一些事情(在这种情况下,退出循环)?
nmi*_*els 39
import time
now = time.time()
future = now + 10
while time.time() < future:
# do stuff
pass
Run Code Online (Sandbox Code Playgroud)
或者,如果你已经得到了你的循环:
while True:
if time.time() > future:
break
# do other stuff
Run Code Online (Sandbox Code Playgroud)
这种方法适用于pygame,因为它几乎要求你有一个很大的主循环.
使用time.time()/ datetime.datetime.now()会在系统时间发生变化时中断(用户更改时间,通过NTP等时间调整服务或从/更改为dayligt节省时间来更正!).
time.monotonic()或time.perf_counter()似乎是正确的方法,但它们只能从python 3.3获得.另一种可能性是使用threading.Timer.这是否比time.time()和朋友更可靠取决于内部实现.另请注意,在系统资源方面创建新线程并不是完全免费的,因此在需要并行运行大量计时器的情况下,这可能是一个糟糕的选择.
我在我的python程序中使用此功能。该函数的输入例如:
value = time.time()
def stopWatch(value):
'''From seconds to Days;Hours:Minutes;Seconds'''
valueD = (((value/365)/24)/60)
Days = int (valueD)
valueH = (valueD-Days)*365
Hours = int(valueH)
valueM = (valueH - Hours)*24
Minutes = int(valueM)
valueS = (valueM - Minutes)*60
Seconds = int(valueS)
print Days,";",Hours,":",Minutes,";",Seconds
start = time.time() # What in other posts is described is
***your code HERE***
end = time.time()
stopWatch(end-start) #Use then my code
Run Code Online (Sandbox Code Playgroud)