gpt4 book ai didi

pyglet on_draw 事件仅在鼠标移动时发生

转载 作者:行者123 更新时间:2023-12-04 20:44:04 27 4
gpt4 key购买 nike

我有一个奇怪的问题。当 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()

这是 a video解释事情。

最佳答案

我昨晚在试图找出同样的问题时遇到了这个问题。我弄清楚是什么原因造成的。

我使用了一个装饰器并将我的更新放在 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()

我知道这个问题已经有一段时间了,提问者可能已经放弃了,但希望它能帮助遇到这个问题的其他人。

关于pyglet on_draw 事件仅在鼠标移动时发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21060970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com