游戏交叉编译与打包

6 投票
6 回答
1728 浏览
提问于 2025-04-15 20:10

我和一些朋友想开发一个游戏。用什么语言都可以。我已经编程了很多年,主要是用C语言,但从来没有写过游戏。我们当中有一个人对SDL有一点了解。用这个机会学习Python和pygame也不错。

我们希望我们的游戏是“独立运行”的。所谓独立运行,就是大多数用户(至少是Linux、Mac和Windows用户)不需要手动下载和安装其他东西,只需要一个包就可以了。如果安装过程中能自动处理缺失的依赖项,那也没问题。如果这些包里包含可执行文件,我们希望能通过交叉编译从Linux生成它们。

我们应该如何打包和组织项目,哪种语言最合适呢?

6 个回答

3

这主要取决于你是想自己从头开始做一个完整的游戏,包括游戏引擎,还是想在一个已经存在的游戏引擎上进行开发。虽然自己做一个完整的引擎需要付出更多的努力和时间,但这会让你获得很多经验。

如果你想创建一个游戏引擎,推荐使用C++语言(C语言也可以,但我个人更喜欢C++)。

对于构建管理工具,我发现使用CMake是个不错的选择,它可以帮助你在不同的平台上管理构建过程,甚至可以创建安装程序,并安装所需的库。

至于库,大部分问题可以通过SDL来解决。虽然使用起来不太舒服,但它能处理跨平台的接口问题,比如视频(OpenGL)、窗口、输入和音频。不过,你还是需要学习OpenGL,SDL只是负责初始化和设置。

至于使用Python,我不太推荐,除非你的游戏很简单(比如2D游戏,或者简单的3D游戏没有复杂的物理效果),因为Python会带来额外的开销,可能会影响游戏的帧率。如果你需要一个轻量级的脚本语言,Lua绝对是最好的选择,它简单、灵活且快速。如果你想简单集成,可以使用LuaBind,但要小心!使用时要非常谨慎,因为它可能会严重拖慢你的编译速度!

4

看看这个Ogre吧;它是Torchlight背后的引擎。它支持Windows、Ubuntu、MacOS和iPhone。

你也可以去看看Gamasutra:他们的文章、访谈、深入分析和总结提供了关于游戏开发过程非常有趣的见解。

9

如果你之前没有编写过游戏,我建议你从Python和Pygame开始。Python本身很容易学习,如果你已经会编程,那就更简单了。

使用Pygame,你几乎不用花时间去写一些繁琐的代码,比如窗口管理和声音设置。你可以很快开始编写游戏逻辑,没多久就能开始进行blit操作了。而且,制作一个游戏的原型也非常简单,这样你就可以开始尝试不同的游戏机制了。我曾经在几个小时内就编写了一个简单的横版卷轴平台游戏。

性能

使用Python和Pygame制作简单游戏的性能通常还不错,但如果是“平滑滚动”的游戏,性能可能会比较差,尤其是在Linux上(这是我个人的经验——在Linux上,pygame.display.update()每帧大约需要15-30毫秒,而在Windows上用便宜的Intel显卡只需要4-5毫秒,虽然这是两年前的情况,最近Linux的Intel驱动有所改善)。另外,如果你的代码涉及很多物理或数学运算,Psyco可以让你获得很大的性能提升(在某些情况下提升20%到200%),不过你只能在x86电脑上使用32位的Python。

一旦你把大部分游戏逻辑搞定了,如果性能还是不够好,你可以考虑换成C和SDL。因为你已经写好了游戏逻辑,所以只需要专注于直接使用SDL。即使这样也应该相对简单——Pygame内部使用了SDL,所以转换起来应该不会太复杂。

OpenGL

不幸的是,上述情况只适用于2D游戏——Pygame对OpenGL几乎没有帮助。不过,我建议你从OpenGL开始学习游戏编程。刚开始理解OpenGL可能会比较困难,这样你就会面临两个问题:一是要搞清楚游戏逻辑、物理、人工智能等是怎么工作的,二是要理解OpenGL。最终学会OpenGL是值得的,但不建议一开始就从这块入手,最好先从基础开始。

跨平台考虑

关于跨平台的问题,py2exe(用于Windows)和py2app(用于Mac)可以让你构建包含所有依赖项(包括Python解释器和Pygame)的独立可执行文件;不过,我认为你可能无法在Linux环境下构建这些可执行文件(你可能需要借用一台Windows或Mac电脑几分钟)。对于Linux,你可能只需分发一个.deb文件,并将Pygame列为依赖项(如果需要,可以将Psyco列为推荐或建议)。

撰写回答