游戏交叉编译和包装

时间:2010-03-08 13:34:11

标签: python c cross-platform packaging cross-compiling

有些朋友和我想开发游戏。任何语言都可以。我已经在C编程多年了,但之前从未写过游戏。我们其中一个人对SDL有点了解。学习Python + pygame也是一个很好的借口。

我们希望我们的游戏“独立”。通过独立,我的意思是大多数用户(至少Linux,Mac和Windows)不必手动下载和安装除包之外的任何其他东西。如果安装自动处理缺少的依赖项,则可以。如果包中包含二进制文件,我们希望能够使用Linux中的交叉编译生成它们。

我们应该如何打包和构建项目,以及哪种语言最适合?

6 个答案:

答案 0 :(得分:8)

如果您之前没有编写过游戏,我建议您先从Python和Pygame开始。如果你已经是程序员,那么Python本身很容易学习,所以对你来说不会太过分。

使用Pygame,你几乎没有时间编写“胶水”或处理窗口管理和声音设置等平凡的低级细节 - 你几乎可以立即编写游戏逻辑,并且很快就会成为{{1左右。更重要的是,让你的游戏原型运行起来非常容易,所以你可以开始尝试使用这些机制 - 我已经在几个小时内编写了一个简单的小型侧滚平台游戏。

性能

Python与Pygame的性能对于简单的游戏来说通常是不错的,尽管“平滑滚动”的游戏可能表现不佳,特别是在Linux上(根据我的经验,至少 - blit每个花费15-30ms Linux上的框架,以及带有廉价英特尔显卡的Windows上的4-5,虽然这是在两年前,Linux英特尔驱动程序最近有所改进)。另外,如果你有物理/数学重的代码Psyco可以给你巨大的加速(在某些情况下为20% - 200%),尽管你将被限制在x86计算机上的32位Python。

一旦你完成大部分游戏逻辑,如果性能仍不理想,你可以切换到C和SDL。由于您已经编写了游戏逻辑,因此您只需要专注于直接处理SDL。即使这应该相当容易--Pygame内部使用SDL,因此翻译应该相对简单。

的OpenGL

不幸的是,如果您正在编写2D游戏,上述情况才会出现 - Pygame基本上没有为OpenGL提供任何帮助。但是,我建议使用OpenGL开始游戏编程。一开始可能很难理解,所以你一下子就会遇到两个问题 - 首先,你要弄清楚如何获得游戏逻辑/物理/ ai /等。工作,然后你很难理解OpenGL。最终学习OpenGL是值得的,但不是从最开始 - 更好地从基础开始并从那里开始。

跨平台注意事项

就跨平台问题而言 - py2exe(对于Windows)和py2app(对于Mac)允许您构建包含依赖项的单个可执行文件(包括Python解释器和Pygame);但是,我认为您无法从Linux环境构建可执行文件(您必须能够借用Windows / Mac计算机几分钟,可能)。对于Linux,你可能只是发布一个.deb,它将Pygame列为依赖关系(如果需要,可以将Psyco列为推荐或建议)。

答案 1 :(得分:4)

看看Ogre;它是 Torchlight 背后的引擎。它支持Windows,Ubuntu,MacOS和iPhone。

您可能还想阅读Gamasutra:他们的文章,访谈,深入和死后分析为游戏开发过程提供了非常有趣的见解。

答案 2 :(得分:3)

这在很大程度上取决于你是想要建立一个包括引擎在内的整个游戏,还是只是建立在已建立的游戏引擎上。虽然构建整个引擎包含更多的开销和艰苦的工作,但它为您提供了大量的经验。

现在,如果你想创建一个游戏引擎,那么这个工作的语言就是C ++(C也可以工作,我更喜欢C ++)

对于构建管理工具,我发现使用CMake是一个很好的选择,它可以在几个不同的平台上为您管理构建,甚至还可以创建安装程序,并安装任何所需的库。

至于图书馆,大多数问题都将通过SDL解决,使用它并不是特别令人愉快,但它管理着跨平台与视频(OpenGL),窗口,输入和音频接口的麻烦。您仍然需要学习OpenGL才能在游戏中使用它,SDL只处理初始化和设置。

现在使用Python,我不推荐它,除非你的游戏很简单(2D,或简单的3D没有繁重的物理用法),因为Python带来的开销很大会开始影响你的帧率。对于轻松的脚本语言,Lua绝对是最好的,它简单,灵活,快速。要集成它,如果您想要一个简单的解决方案,请使用LuaBind,但要注意!在你使用它的地方非常有选择性,因为它可以完全杀死你的编译时间!

答案 3 :(得分:1)

我建议您在QT上开发它... QT将自己处理大部分可移植性问题...所以你不必担心它,而且它支持大多数平台,包括移动设备......和QT也有很好的原生游戏支持(图形,用户界面,声音控制..)

Please see application Built in QT

答案 4 :(得分:0)

我认为你的游戏是3D游戏。如果是,那么您需要OpenGL。它是C,因此您将熟悉语法,但由于OpenGL是一个有限状态机,因此方法略有不同。有关此主题的更多信息here

OpenGL基本上内置于每个平台上,因此您只需启动一个全屏窗口并让OpenGL处理​​绘图。对于交叉编译,我建议使用C ++ wxWidgets。它允许您为在每个平台上编译的应用程序的窗口初始化编写单个代码。

如果您决定使用python,wxWidgets也有python binding,在这种情况下您还需要PyOpenGL

答案 5 :(得分:0)

对于休闲游戏,我会推荐Flash