将Cython用作游戏的主要编程语言有多实用?
我是一名经验丰富的Python程序员,我非常喜欢它,但对于游戏编程而言,我确实是个新手。我知道通常认为Python太慢而无法进行任何严肃的游戏编程,这就是为什么Cython对我很有趣。使用Cython,我可以使用类似Python的语言,速度为C.
据我所知,我可能还需要学习一些C / C ++,但看起来Cython会比较加快开发时间。
那么,它是否实用?我还能使用OpenGL,OpenAL和Bullet Physics等C / C ++库吗?
答案 0 :(得分:16)
如果您正在使用这样的组合并且您的目标是编写3D游戏,那么您可能会通过成熟的物理和音频绑定以及Python API等现成的3D引擎获得更好的里程数。 {3}}(OGRE 3D)或Python-OGRE。即使您不这样做,这篇关于Panda3D的帖子可能会有所帮助。
我现在不确定,但是using Cython with Panda3D,两者之间的权衡基本上是:
...但是很可能会发生变化,因为在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作为一种现代语言并不好。