我有一个奇怪的问题。当pyglet应用程序启动时,它只会绘制1-2帧,然后冻结。on_draw事件只是停止发生。但是,每当我移动鼠标或按下键时,也会调度on_draw事件。简而言之,我必须移动鼠标才能使pyglet应用程序基本运行。
这实际上是在Windows中发生的。在带有compiz的Ubuntu中,我只需要移动一次鼠标,然后应用程序即可开始正常工作。
这是我的代码示例:
#!/usr/bin/env python
import pyglet
win = pyglet.window.Window(width=800, height=600)
label = pyglet.text.Label('Abc', x=5, y=5)
@win.event
def on_draw():
win.clear()
label.x += 1
label.draw()
pyglet.app.run()
我昨晚遇到这个问题时试图找出同样的问题。我弄清楚是什么原因造成的。
我曾经用过一个装饰器,然后将更新放在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中调用了他们的draw方法。
@window.event()
def on_draw():
window.clear()
batch.draw()
我知道这个问题已经解决了一段时间了,询问者可能已经放弃了,但是希望它将对遇到此问题的其他人有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句