使用Cython进行游戏开发?

19 投票
6 回答
10198 浏览
提问于 2025-04-16 07:04

用Cython作为游戏的主要编程语言实际可行吗?

我是一名有经验的Python程序员,我非常喜欢Python,但在游戏编程方面我还是个新手。我知道通常认为Python在进行严肃的游戏编程时速度太慢,这就是Cython吸引我的原因。使用Cython,我可以用类似Python的语言,同时享受到C语言的速度。

我明白我可能还是需要学习一些C/C++的知识,但看起来使用Cython可以大大加快开发速度。

那么,这样做实际可行吗?我还可以使用像OpenGL、OpenAL和Bullet Physics这样的C/C++库吗?

6 个回答

7

在这个日期(2011年4月12日),unixmab83的说法是错误的。

Cython并不禁止使用线程,你只需要使用no_gil这个特殊的语句。

另外,Cython现在可以正常使用C++的绑定了。

我们确实在做一些接近游戏开发的事情。所以虽然我不能给出最终的结论,但Cython是一个有效的选择。

11

我是Ignifuga游戏引擎的开发者,这个引擎主要是做2D游戏的,使用的是Python、Cython和SDL。我的工作一般是先用Python写代码,然后检查引擎的性能,看看有没有明显的瓶颈(比如主循环和渲染代码通常是重点关注的地方),然后把这些模块转换成Cython。接着,我会把所有的代码(包括Python和Cython的部分)都通过Cython处理,并且和SDL进行静态编译。

Cython的一个大优点是,它和SDL或者其他基于C的库的连接几乎是非常简单的。至于线程方面,这个引擎目前是单线程的,使用了一种叫Greenlets的合作式多任务处理。这是因为我们设计时考虑到,初学者可能会在多线程上遇到一些问题,所以选择了这种方式,而不是Cython本身的限制。

18

如果你正在做一个3D游戏,建议你使用现成的3D引擎,比如OGRE 3DPanda3D。这些引擎已经有成熟的物理和音频功能,并且支持Python编程。即使你不打算用这些引擎,这篇关于在Panda3D中使用Cython的文章也可能对你有帮助。

我不确定现在的情况,但在2007年,这两个引擎的优缺点大致是这样的:

  • Panda3D的文档更完善,从一开始就设计成一个用C++加速的Python引擎(他们在API设计上做了一些C++引擎项目不会想到的决定),所以它的Python接口也更成熟。
  • PyOgre则是建立在一个更先进的引擎之上,拥有更大、更活跃的社区。

不过,随着时间的推移,这种情况可能已经发生了变化。毕竟在2007年,Panda3D还在使用一个与GPL不兼容的许可证,这让很多人望而却步。(我也是其中之一)

撰写回答