我一直在做一个游戏,我使用的python库很糟糕(Pyglet)。我想尝试在OSX版本中使用Cocoa。在
我将能够找出如何使用NSWindow和NSOpenGLView等类中的对象,然后将这些对象放入我自己的类中进行游戏循环。在
我不知道如何使用PyObjC加载一个动态的Objective-C库,然后使用python中的类来设置游戏,我想这个游戏可以由NSTimer循环。在
但是,loop方法还需要从许多python类之一调用python方法。我的游戏由许多python类组成,这些类用于游戏的不同部分(Mapmaker、GameSession、AnacondaGame等)。游戏循环将需要调用这些类中的任何一个循环方法,这取决于当前部分,并传递偶数信息。在
PyObjC显然是“双向”的,那是怎么做到的呢?在
或者,我可以创建两个由python调用的方法,并在其中添加python代码,其中循环由python控制。在
PyObjC网站上的“文档”似乎只解释了如何在python中使用Cocoa,而没有其他解释。在
我做不到的是用interfacebuilder创建一个固定的GUI,因为库需要基于python输入来创建类的初始化方法。在
了解Objective-C的语法并不是一个大问题,我可以查阅Cocoa文档来生成我需要的对象。在
谢谢你的帮助。我们将不胜感激。我讨厌使用像pygame和pyglet这样的破库,使用特定于平台的OS api似乎是确保质量的最佳方法。在
PyObjC将Python连接到Objective-C运行时,因此如果您在Python中创建NSObject子类,那么可以从运行在同一进程中的Objective-C代码访问它们。这意味着您需要将所有Python功能封装在NSObject的子类中,您可以通过网桥访问NSObject。在
我这样做的方法是在Objective-C端有一个singleton控制器类,它有一个类似
-(void)pythonReady:(PythonClass *)pythonObject
的方法,还处理Python代码的加载(这确保了在加载Python代码时控制器类存在)。然后,在Python代码中,在创建PythonClass的实例之后,可以在控制器singleton上调用pythonReady:
。然后,在Objective-C端的pythonReady:
中,可以调用pythonObject
上需要的任何方法,它将在Python端运行代码。在要从控制器类加载Python代码,可以执行以下操作:
基本上,我们只需使用pythoncapi在当前进程中运行脚本。脚本本身启动到当前进程中运行时的桥,然后可以使用cocoaapi访问控制器singleton。在
相关问题 更多 >
编程相关推荐