手动pyglet循环在几次迭代后冻结



我正在测试pyglet,以便在更大的项目中使用,显然pyglet建议/希望您使用它自己的循环(使用pyglet.app.run())

这是我不想要的东西,因为其他包的兼容性,也不必重写整个程序结构。

在这里,我有来自不同部分、教程和文档的原型代码。它运行5-15次迭代,然后冻结,不打印任何内容,也不进行任何绘图更新。

from __future__ import division, print_function
import sys
import pyglet
window = pyglet.window.Window(800, 800, resizable=True)
window.set_caption('Pyglet Testing')
window.flip()
image = pyglet.resource.image('Sprites/scout.png')
def draw(dt):
    image.blit(700-dt, 400)
while not window.has_exit:
    dt = pyglet.clock.tick()
    window.dispatch_events()
    window.clear()
    draw(dt)
    window.flip()
    print(dt)

我的怀疑是,我没有做任何事情来捕捉和处理事件,所以在某个时刻,它只是充斥着事件,并阻止了整个事情。然而,我不明白如何做到这一点,在不到1秒的时间里被事件淹没似乎有点过分。

有什么帮助吗?

基本上,您正在做的是向窗口发送尽可能多的image.blit(…)命令,直到pc可能无法再处理它。

例如,如果您这样更改代码:

添加此代码:

import time  
from time import sleep  

更改代码:

    def draw(dt):    
        image.blit(700-dt, 400)  
        sleep(0.1)             #insert this line  

当执行修改后的代码时,您会注意到它没有冻结,输出dt大约为0.11秒,这是自上次"tick"以来的秒数=睡眠时间(0.1秒)+剩余时间(清除窗口,显示新帧…)

最新更新