【发布时间】:2023-08-18 18:23:01
【问题描述】:
我正在尝试在 Tkinter 中创建一个游戏,并且我希望一个 While 循环每秒只运行 x 次。均匀分布。
我尝试将 1 除以 X 并使用时间模块来等待该数量。但它没有每秒运行 60 次,只有 50 次。
def start(self):
Frame.__init__(self, self.master)
self.fpLength = 1 / self.fps
while True:
# Code here
time.sleep(self.fpLength)
我希望代码每秒运行 60 次。但它运行在 55 左右。
【问题讨论】:
-
# Code here也需要一些时间......而while语句本身会消耗很少的时间。 -
@hiroprotagonist 是的,这是有道理的。但我知道没有其他方法可以做到这一点。我认为这在 pygame 中是可能的,但我对 Tkinter 更有信心。
-
作为第一个近似值,您可以测量在循环的每次迭代中到达
sleep语句(使用time.perf_counter)所需的时间,并计算+/- 正确的睡眠时间。 . -
如果你没有在线程 time.sleep() 中这样做,那是一个糟糕的选择。事件驱动的 tkinter 将冻结。
-
只有当您要运行的代码少于 1/60 秒时,您才能每秒运行 60 次。
标签: python while-loop frame-rate