私はpygameを使ってゲームをプログラミングしています。リアルタイム通信用の udp ベースのプロトコルである OpenSoundControl (OSC) を使用して、キャラクターの 1 つを制御するつもりです。基本的に、simpleOSCモジュールを使用して、いくつかの OSC コマンドを pygame プログラムの関数にバインドしています。
私のゲーム構造は次のようなものです(これは単純化されているため、アイデアが得られます):
globalsomething = {}
def handler(*m):
global globalsomething
print "it works"
print globalsomething
print "not working"
if __name__ == "__main__":
osc.init()
osc.listen('', 3333)
osc.bind(handler,'/game/dosmtng')
app = Game()
while True:
app.MainLoop()
Game は、pygame.init() を実行し、pygame に関連するほとんどすべての描画と処理を行う単純なクラスです。
コードを実行するときに発生する問題は、osc パケットを送信すると、「動作しています」が「動作していません」ではなく、後続の osc パケットが処理されないことです。
simpleOSC はスレッドを使用するため、この動作に対する私の唯一の説明は、pygame がある種の互換性のないスレッド (?) を使用し、pygame のスレッドにある変数にアクセスしようとするとロックすることです。
原因と(可能であれば)解決策についてのアイデアはありますか?