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

时间:2013-08-11 18:01:24

标签: python rendering game-engine 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秒钟内充满了事件似乎有点多了。

任何帮助?

1 个答案:

答案 0 :(得分:0)

基本上你正在做的是向窗口发送尽可能多的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秒)+余数后的秒数时间(清除窗口,显示新框架......)