0

私は大規模なプロジェクトで使用するために 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秒未満でイベントがあふれてしまうのは少し難しいようです.

何か助けはありますか?

4

1 に答える 1

0

基本的に、あなたがしていることは、PCがおそらくそれを処理できなくなるまで、できるだけ多くの 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 秒) + 残り時間 (クリア)ウィンドウ、新しいフレームを表示 ...)

于 2013-09-07T15:22:13.150 に答える