19

使用 Cython 作为游戏的主要编程语言有多实用?

我是一位经验丰富的 Python 程序员,我非常喜欢它,但在游戏编程方面,我无疑是个新手。我知道 Python 通常被认为太慢而无法进行任何严肃的游戏编程,这就是为什么 Cython 对我来说很有趣。使用 Cython,我可以使用具有 C 速度的类似 Python 的语言。

我知道无论如何我可能需要学习一点 C/C++,但相比之下,Cython 似乎会加快开发时间。

那么,实用吗?我还能使用 OpenGL、OpenAL 和 Bullet Physics 等 C/C++ 库吗?

4

6 回答 6

18

如果您正在使用这样的组合并且您的目标是编写 3D 游戏,那么您可能会从具有成熟物理和音频绑定的现成 3D 引擎以及OGRE 3DPanda3D等 Python API 获得更好的里程. 即使您不这样做,这篇关于将 Cython 与 Panda3D 结合使用的帖子也可能会有所帮助。

我现在不确定,但早在 2007 年,两者之间的权衡基本上是:

  • Panda3D 有更好的文档记录,并且从头开始设计为 C++ 加速 Python 引擎(显然他们做出了一些 C++ 引擎项目不会发生的 API 设计决策),并且可以预见的是,它拥有更成熟的 Python API。
  • PyOgre 建立在一个更先进的引擎之上,并拥有一个更大、更有活力的社区。

...但是很可能已经改变了,考虑到时间的流逝,在 2007 年,Panda3D 仍然处于与 GPL 不兼容的许可证下,这让很多人望而却步。(包括我自己)

于 2010-11-15T02:02:52.280 回答
11

我是Ignifuga Game Engine的开发人员,它面向 2D 并基于 Python/Cython/SDL。我一般做的是用 Python 开发代码,然后对引擎进行剖析,看看是否有一些明显的瓶颈(主循环、渲染代码都是很好的候选者),然后将这些模块转换为 Cython。然后我通过 Cython 运行所有代码(基于 Python 和 Cython),并针对 SDL 静态编译它。Cython 的另一个大“优点”是绑定到 SDL 或任何基于 C 的库几乎是微不足道的。关于线程,引擎目前是单线程的,通过Greenlets协作多任务,尽管这来自于设计决策,以减轻没有经验的开发人员可能陷入的潜在多线程陷阱,而不是对 Cython 的限制。

于 2012-02-21T12:36:26.737 回答
7

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

Cython 不禁止使用线程,您只需要使用 no_gil 特殊语句即可。

除了 c++ 的绑定之外,现在在 cython 中也可以使用。

我们确实将它用于接近游戏开发的东西。因此,虽然我不能就此定论,但 cython 是一个有效的候选人。

于 2011-04-12T16:16:20.640 回答
5

我发现很多时候,尤其是对于较大的库,您最终会花费大量时间来配置 Cython 项目以构建,知道要导入哪些结构,将 C 代码在任一方向桥接到 Python 等。虽然 Cython 是一个不错的权宜之计(并且比纯 C/C++ 开发更令人愉快),但您必须学习有效使用它的 C++ 数量基本上意味着您将不得不硬着头皮学习 C++。

PyGame 怎么样?

于 2010-11-15T02:02:04.803 回答
0

我知道 Cython,你不必知道 C/C++。您将使用静态类型,但非常容易。最难的部分是让编译工作,我认为在 Windows 上这是通过 Visual Studio 完成的。有一个标准库之类的东西,例如包括数学。速度增益不是太大,但这取决于您的范围。ctypes 快得多(纯 C),但与 Python 的连接非常慢,所以我决定寻找仍然可以动态的 Cython。

为了在游戏中提高速度,Cython 将是正确的选择,但我认为这种性能也是有限的。

于 2013-06-11T14:57:30.433 回答
-1

线程!!!一个好的现代游戏必须使用线程。Cython 实际上禁止使用它们,始终持有 GIL(全局解释器锁),使您的代码按顺序运行。

如果您不是在编写大型游戏,那么 Python/Cython 就可以了。但是如果没有良好的线程支持,Cython 作为一种现代语言就不好说了。

于 2010-12-14T23:54:42.967 回答