我正在使用 pygame 编写游戏。我打算使用 OpenSoundControl (OSC) 来控制其中一个角色,这是一种基于 udp 的实时通信协议。基本上我正在使用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 线程中的变量时,它会锁定。
关于原因和(如果可能)解决方案的任何想法?