我正在编写一款应该在多个平台上运行的游戏。我需要在所有平台上保持良好的准确性。
我对知道一天中的时间不感兴趣,对我来说重要的是两次通话之间经过的时间。
阅读文档后,time.time在Linux上显得更好,在Windows上显示时间更好。 我想写这样的东西:
import os
import time
__all__ = ['hrtime']
platform = os.name
if platform == 'posix':
hrtime = time.time
elif platform == 'nt':
hrtime = time.clock
else:
# 'os2', 'ce', 'java', 'riscos'
raise ValueError("I have no idea what I'm doing.")
但是其他平台怎么样? MacOS会返回{posix}吗?怎么样的cygwin,是Linux还是Windows?什么是'ce'?我是否应该关心这些平台?
另一种选择可能是使用pygame的SDL时间。这似乎在每个平台上都具有毫秒精度。由于我使用SDL进行渲染,所以我不介意使用它。但是,我现在正在研究网络代码,在我的网络代码中使用SDL时间感觉有点奇怪。
问题:你更喜欢用什么,为什么?
答案 0 :(得分:1)
我一直使用它,从未遇到过任何问题:
import sys
import time
if sys.platform == "win32":
# on Windows, the best timer is time.clock()
timerfunc = time.clock
else:
# on most other platforms, the best timer is time.time()
timerfunc = time.time
即使你在其他平台上遇到一些问题,以后也很容易调整代码。
我建议不要使用SDL,因为你提到的原因,以及精度的增加(如果有的话)可能甚至不明显。
答案 1 :(得分:1)
由于你使用的是Pygame,你应该使用pygame的函数来抽象:
只需拨打pygame.time.get_ticks()
- 它会返回自调用pygame.init()
除了面向多媒体的程序之外,使用pygame从声音警告甚至键盘读取等方面调用SDL功能并不是很少见 - 使用它应该没有问题。
答案 2 :(得分:1)
为了最佳度量经过时间(自Python 3.3起),请使用time.perf_counter
。
返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟,以测量短持续时间。它确实包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。