使用Cython进行游戏开发?
用Cython作为游戏的主要编程语言实际可行吗?
我是一名有经验的Python程序员,我非常喜欢Python,但在游戏编程方面我还是个新手。我知道通常认为Python在进行严肃的游戏编程时速度太慢,这就是Cython吸引我的原因。使用Cython,我可以用类似Python的语言,同时享受到C语言的速度。
我明白我可能还是需要学习一些C/C++的知识,但看起来使用Cython可以大大加快开发速度。
那么,这样做实际可行吗?我还可以使用像OpenGL、OpenAL和Bullet Physics这样的C/C++库吗?
6 个回答
在这个日期(2011年4月12日),unixmab83的说法是错误的。
Cython并不禁止使用线程,你只需要使用no_gil这个特殊的语句。
另外,Cython现在可以正常使用C++的绑定了。
我们确实在做一些接近游戏开发的事情。所以虽然我不能给出最终的结论,但Cython是一个有效的选择。
我是Ignifuga游戏引擎的开发者,这个引擎主要是做2D游戏的,使用的是Python、Cython和SDL。我的工作一般是先用Python写代码,然后检查引擎的性能,看看有没有明显的瓶颈(比如主循环和渲染代码通常是重点关注的地方),然后把这些模块转换成Cython。接着,我会把所有的代码(包括Python和Cython的部分)都通过Cython处理,并且和SDL进行静态编译。
Cython的一个大优点是,它和SDL或者其他基于C的库的连接几乎是非常简单的。至于线程方面,这个引擎目前是单线程的,使用了一种叫Greenlets的合作式多任务处理。这是因为我们设计时考虑到,初学者可能会在多线程上遇到一些问题,所以选择了这种方式,而不是Cython本身的限制。
如果你正在做一个3D游戏,建议你使用现成的3D引擎,比如OGRE 3D或Panda3D。这些引擎已经有成熟的物理和音频功能,并且支持Python编程。即使你不打算用这些引擎,这篇关于在Panda3D中使用Cython的文章也可能对你有帮助。
我不确定现在的情况,但在2007年,这两个引擎的优缺点大致是这样的:
- Panda3D的文档更完善,从一开始就设计成一个用C++加速的Python引擎(他们在API设计上做了一些C++引擎项目不会想到的决定),所以它的Python接口也更成熟。
- PyOgre则是建立在一个更先进的引擎之上,拥有更大、更活跃的社区。
不过,随着时间的推移,这种情况可能已经发生了变化。毕竟在2007年,Panda3D还在使用一个与GPL不兼容的许可证,这让很多人望而却步。(我也是其中之一)