使用Cython进行游戏开发?

时间:2010-11-15 01:46:21

标签: python c cython

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

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

据我所知,我可能还需要学习一些C / C ++,但看起来Cython会比较加快开发时间。

那么,它是否实用?我还能使用OpenGL,Op​​enAL和Bullet Physics等C / C ++库吗?

6 个答案:

答案 0 :(得分:16)

如果您正在使用这样的组合并且您的目标是编写3D游戏,那么您可能会通过成熟的物理和音频绑定以及Python API等现成的3D引擎获得更好的里程数。 {3}}(OGRE 3D)或Python-OGRE。即使您不这样做,这篇关于Panda3D的帖子可能会有所帮助。

我现在不确定,但是using Cython with Panda3D,两者之间的权衡基本上是:

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

...但是很可能会发生变化,因为在2007年,Panda3D仍然处于GPL不兼容的许可证之下并且驱逐了很多人。 (包括我自己)

答案 1 :(得分:8)

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

答案 2 :(得分:6)

此日期(2011年4月12日)unixmab83错误。

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

除了c ++的bindins现在在cython中起作用。

我们确实将它用于接近gamedev的东西。因此,虽然我无法做到最终,但cython是一个有效的候选人。

答案 3 :(得分:5)

我发现很多时候,特别是对于大型库,你花费了大量的时间来配置Cython项目来构建,知道要导入哪些结构,将C代码桥接到Python中虽然Cython是一个很好的权宜之计(并且比纯C / C ++开发更加令人愉快),但是你必须学会​​有效使用它的C ++数量基本上意味着你必须咬紧牙关并学习无论如何,C ++。

PyGame怎么样?

答案 4 :(得分:0)

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

对于游戏中的速度提升,Cython将是正确的选择,但我会说这个性能也有限。

答案 5 :(得分:-1)

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

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