pygame.event.get() が別のスレッド内でイベントを返せない
このクエリは、pygame.event を利用するときに発生する問題に関連しています。パックマン風のゲームでユーザー入力を管理するための別のスレッド内の .get()。入力の受信を担当するコード スニペットは次のとおりです。
def receiving_inputs(self): while True: events = pg.event.get() for event in events: if event.type == pg.KEYDOWN: if event.key == pg.K_UP: self.move = 'n' elif event.key == pg.K_RIGHT: self.move = 'e' elif event.key == pg.K_DOWN: self.move = 's' elif event.key == pg.K_LEFT: self.move = 'w' time.sleep(1/60) threading.Thread(target=self.receiving_inputs).start()
このコードが実行されると、キーボードのキーを押してもイベントはトリガーされませんが、マウスを動かすとイベントが返されます。興味深いことに、別のスレッドではなく、プログラムのメイン ループ内で実行すると、同じコードが問題なく機能します。
この質問は、別のスレッドを使用することで、メイン ループで登録されなくなるキー入力のインスタンスを最小限に抑えたいという要望から生じています。 .
解決策:
予期しない動作は、つまり、イベントはメインスレッド内で管理する必要があるということです。 pygame.event ドキュメントに記載されているように:
[...] イベント サブシステムはメイン スレッドから呼び出される必要があります。
別のスレッドからイベントを投稿することは可能ですが、イベントキューはメインスレッドによってのみ処理できます。したがって、
イベントがメイン スレッドで取得されていることを確認します。
def receiving_inputs(self): while True: events = pg.event.get() for event in events: ...
スレッドを作成して、イベント:
def move(self, move): ... thread = threading.Thread(target=self.move, args=(move,)) thread.start()
以上が`pygame.event.get()` が別のスレッドでイベントを返せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。