2013-08-11 3 views
0

Я тестируя pyglet для использования в более крупном проекте, и, видимо, pyglet рекомендует/хочет, чтобы вы использовать собственный цикл (с pyglet.app.run())Ручного цикл pyglet зависает после нескольких итераций

Это это то, чего я не хочу, из-за совместимости других пакетов, а также не переписывать всю структуру программы.

Здесь у меня есть код прототипа, склеенный из разных частей и учебников и документов. Он работает для 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 секунду кажется немного.

Любая помощь?

ответ

0

В основном, что вы делаете, посылает столько изображений image.blit (...) в окно, пока компьютер, вероятно, больше не сможет его обработать.

Например, если вы измените свой код так:

добавить этот код:

import time 
from time import sleep 

код изменения:

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

При выполнении измененного кода, вы заметите, что он не замерзает и выходной сигнал dt составляет около 0,11 секунды, что означает количество секунд с последнего «тика» = время спала (0,1 секунды) + оставшееся время (очистить окно, отобразить новое рама ...)

Смежные вопросы