6

基本的にループがあります (tick、set_caption、screen_fill、event.get()、send_frame_event、flip、repeat)

Windows 7 でウィンドウをドラッグすると、ループがループを停止し、pygame.event.get() でスタックしてしまいました。get([pygame.QUIT]) などの get([pygame.QUIT]) だけのために特定のイベントを定義しようとしましたが、役に立ちませんでした。 .

pygame.event.clear() を呼び出すだけで、ウィンドウをドラッグ/移動するときに同じフリーズ効果が得られます。

回避策はありますか?

完全なコードではありませんが、十分なはずです:

def start(self):
    self.running = True
    Clock = pygame.time.Clock()
    while self.running:
        self.p += 25
        tickFPS = Clock.tick(self.fps)
        pygame.display.set_caption("Press Esc to quit. FPS: %.2f" % (Clock.get_fps()))
        self.screen.fill([self.p&0xFF,(255-self.p)&0xFF,255])
        self.handleEvents()
        self.raiseEvent("updateFrame")
        pygame.display.flip()
def handleEvents(self):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            self.running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                self.running = False

完全なコード: http://pastie.org/private/wm5vqq3f7xe0xlffy1fq

4

2 に答える 2

1

pygame.event.pump()メインループ(またはhandleEvents関数)内に呼び出しをかけてみてください

于 2012-04-12T13:26:54.630 に答える
0

これが役立つかどうかはわかりません:

ウィンドウのサイズ変更ではなく、ウィンドウウィンドウの移動に問題があることに気付きました。おそらく、移動とサイズ変更にはいくつかの類似点がありますか?

サイズ変更に関するドキュメントでこれを見つけました:

次に、表示モードが設定され、いくつかのイベントが pygame イベント キューに配置されます。pygame.QUIT は、ユーザーがプログラムのシャットダウンを要求したときに送信されます。ディスプレイが入力フォーカスを得たり失ったりすると、ウィンドウは pygame.ACTIVEEVENT イベントを受け取ります。ディスプレイが pygame.RESIZABLE フラグで設定されている場合、ユーザーがウィンドウのサイズを調整すると pygame.VIDEORESIZE イベントが送信されます。画面に直接描画するハードウェア ディスプレイは、ウィンドウの一部を再描画する必要があるときに pygame.VIDEOEXPOSE イベントを受け取ります。

と:

ユーザーがゲーム ウィンドウのサイズを変更しても、pygame は内部の screen surface を自動的に更新しないことに注意してください。VIDEORESIZE が送信されるたびに set_mode() を呼び出す必要があります。これは、ドキュメントでより明確にする必要があります。

おそらく、ゲームウィンドウを移動すると、同様のことが起こりますか?

于 2012-04-12T12:26:49.627 に答える