2010-11-15 89 views
12

将Cython作为游戏的主要编程语言有多实用?使用Cython进行游戏开发?

我是一个有经验的Python程序员,我绝对喜欢它,但我承认一个新手,当谈到游戏专门编程。我知道通常Python被认为太慢而无法进行任何严肃的游戏编程,这就是为什么Cython对我很有趣。使用Cython,我可以使用类似Python的语言,速度为C。我知道我可能需要学习一点C/C++,但似乎Cython会加快开发时间比较。

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

+0

http://docs.cython.org/src/userguide/external_C_code.html – 2010-11-15 01:54:50

+0

这在很大程度上取决于你的游戏是否是井字棋或第一人称射击游戏... ;-) – 2010-11-15 02:09:57

回答

15

如果您正在使用这样的组合,并且您的目标是编写3D游戏,那么您可能会从具有成熟物理和音频绑定以及Python API的现成3D引擎中获得更好的性能OGRE 3DPython-OGRE)或Panda3D。即使你不这样做,这篇关于using Cython with Panda3D的文章可能会有所帮助。

我不知道了,但back in 2007,权衡两者之间基本上是:

  • Panda3D的是更好的文件证明和设计从地面行动是一个C++加速的Python引擎(显然他们做出了一些C++引擎项目不会出现的API设计决策),可以预见的是,它有一个更成熟的Python API。
  • PyOgre建立在一个更先进的引擎之上,拥有更大更有活力的社区。

...但它很可能是可能已经改变,因为,随着时间推移不谈,在2007年的Panda3D仍在一个GPL不兼容的授权,并且开走了很多人。 (包括我自己)

+0

+1设法为这个问题提供一个潜在有用的答案。我认为这是无望的。 – 2010-11-15 02:10:53

+3

作为一个说明,Python-Ogre现在几乎已经死了,特别是因为网站已经完全没了:-( – 2014-04-05 00:30:06

5

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

PyGame怎么样?

-1

主题!!!一个好的现代游戏必须使用线程。 用Cython几乎禁止其使用,抱着GIL(全局解释器锁)的整段时间,使你的代码运行的顺序。

如果你不写一个巨大的游戏,比Python /用Cython是好的。但是,如果没有良好的线程支持,Cython就不会成为现代语言。

+1

)如果你的代码没有碰到Python对象,你可以释放GIL在nogil块中。函数也可以注释为“nogil”。现在,Cython拥有本地数组,所以你可以在不触及Python对象的情况下做很多事情。 – Winterstream 2013-02-11 14:31:24

6

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

用Cython并不禁止使用线程,你只需要使用特殊no_gil陈述。

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

我们使用它来接近gamedev。所以虽然我不能在这个最后,cython是一个有效的候选人。

7

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

0

我知道Cython,你不必知道C/C++。 您将使用静态打字,但很容易。 最难的部分是让编译工作,我认为在Windows上这是通过视觉工作室的事情完成的。 有一些像标准库,包括数学例如。速度增益不是太大,但这取决于你的范围。 ctypes要快得多(纯C),但与Python的连接非常缓慢,因此我决定寻找可以仍然是动态的Cython。

对于游戏中的速度增益,Cython将是正确的选择,但我将这个性能命名也是有限的。