我有一个函数,它为游戏服务器中的所有玩家和对象运行tick()。我是通过每1秒循环一组来完成的。我需要它是一个坚实的。1。很多时间和数学都取决于这个停顿的精确性,尽可能精确到0.1秒。为了实现这一点,我在勾选线中添加了以下内容:

start_time = time.time()

# loops and code and stuff for tick thread in here...

time_lapsed = time.time() - start_time # get the time it took to run the above code
if 0.1 - time_lapsed > 0:
    time.sleep(0.1 - time_lapsed)
else:
    print "Server is overloaded!"
    # server lag is greater that .1, so don't sleep, and just eat it on this run.
    # the goal is to never see this.

我的问题是,这是最好的方法吗?如果循环的持续时间是0.01,那么时间流逝==0.01…然后睡眠时间应该只有0.09。我问,因为它似乎不起作用。前几天我开始收到超载的服务器消息,服务器肯定没有超载。有没有想过一种“动态”控制睡眠的好方法?也许有一种不同的方法可以在不睡觉的情况下每隔十分之一秒运行一次代码?

最佳答案

其他的python线程可能会在这段时间内运行,从而减少线程的时间。另外,time.time()需要系统时间调整;它可以设置回原处。
有一个类似的函数Clock.tick() in pygame。其目的是限制最大帧速率。
为了避免外界的影响,你可以保持一个独立的基于帧/转弯的计数器来测量游戏时间。

07-24 19:00
查看更多