Pygletで新しい入力イベントディスパッチャーを作成する(赤外線入力)
質問
最近、pyglet-usersグループでこの質問をしましたが、応答があったので、代わりにここで試しています。
Pygletを拡張して、lircでサポートされている赤外線入力デバイスを使用できるようにします。以前にpyLirc( http://pylirc.mccabe.nu/ )をPyGameで使用したことがあります。代わりにPygletを使用するようにアプリケーションを書き換えます。
ボタンが押されたかどうかを確認するには、通常pyLircをポーリングして、キューにボタンが押されたかどうかを確認します。
PygletでpyLircを統合する正しい方法は何ですか?
現在のウィンドウキーボード/マウスイベントと同じように動作する場合は、それを希望しますが、どこから始めればよいかわかりません。
新しいEventDispatcherを作成できることはわかっています。 次のような新しいタイプのイベントを作成し、ポーリング後にそれらをディスパッチします。
class pyLircDispatcher(pyglet.event.EventDispatcher):
def poll(self):
codes = pylirc.nextcode()
if codes is not None:
for code in codes:
self.dispatch_event('on_irbutton', code)
def on_irbutton(self, code):
pass
しかし、pyglet.app.run()を使用する場合、それをアプリケーションのメインループに統合してpoll()を呼び出し続ける方法と、このイベントディスパッチャーをウィンドウにアタッチしてマウスと同じように動作させるにはどうすればよいですか?キーボードディスパッチャ?
pyglet.clock.schedule_intervalを使用してpoll()を定期的に呼び出すようにスケジューラを設定できることがわかりましたが、これは正しい方法ですか?
解決
おそらくOPには遅すぎますが、他の人に役立つ場合に備えて返信します。
イベントディスパッチャを作成し、pyglet.clock.schedule_intervalを使用して定期的にpoll()を呼び出すのが良い方法です。
イベントディスパッチャーをウィンドウにアタッチするには、ディスパッチャーのインスタンスを作成し、その push_handlers メソッド:
dispatcher.push_handlers(window)
その後、ウィンドウに着信する他のイベントと同様にイベントを処理できます。
他のヒント
正しい方法は何でも機能します。より良い方法を見つけた場合は、いつでも後で変更できます。