我昨晚在试图解决同样的问题时遇到了这个问题。我弄清楚是什么原因造成的。
我使用了装饰器并将更新放入 on_draw 方法中,它会正常运行一段时间,然后它会冻结,只有当我移动鼠标或敲击键盘时才能再次开始工作。我尝试了各种技巧来解决这个问题,最后我想也许事情运行得太快了,将它们放入批处理中并让 pyglet 决定何时更新它们会更好。有效。
我还安排了一些事情,以便它们的运行速度大约是我的刷新率的两倍,但又不会太快,以免让一切陷入困境。这对于流畅的动画来说已经足够了。
needles_list = [gauges.speedometer.Needle(speedometer_data, needle, batch=batch, group=needles),
gauges.tachometer.Needle(tachometer_data, needle, batch=batch, group=needles)]
def update(dt):
for needle in needles_list:
needle.update(dt)
pyglet.clock.schedule_interval(update, 1/120.0)
gauges.speedometer.Needle 和 gauges.tachometer.Needle 是 pyglet.sprite.Sprite 的子类,我为它们每个都编写了一个更新方法。然后我像平常一样在 on_draw 中调用他们的绘制方法。
@window.event()
def on_draw():
window.clear()
batch.draw()
我知道这个问题已经有一段时间了,提问者可能已经放弃了,但希望它能帮助其他遇到这个问题的人。