C++ 跨平台游戏开发需要寻找什么?
我将在大约3周后开始一个游戏,我真的希望游戏至少能在另一个平台(linux、MacOS)上运行,但我的团队认为这需要大量的工作。我已经准备好了,但是我想知道我应该注意哪些东西不能移植到linux(除了像DirectXsound这样的Windows特定API之外)C++ 跨平台游戏开发需要寻找什么?,c++,linux,macos,C++,Linux,Macos,我将在大约3周后开始一个游戏,我真的希望游戏至少能在另一个平台(linux、MacOS)上运行,但我的团队认为这需要大量的工作。我已经准备好了,但是我想知道我应该注意哪些东西不能移植到linux(除了像DirectXsound这样的Windows特定API之外) 我一直在网上阅读,Windows的“U s”功能,如sprintf\u s似乎只存在于Windows上;这是正确的还是它们也在linux上实现了?对于“安全”功能:它们是非标准的,几乎是安全的:)是值得注意的 Endianess是字节中
我一直在网上阅读,Windows的“U s”功能,如
sprintf\u s
似乎只存在于Windows上;这是正确的还是它们也在linux上实现了?对于“安全”功能:它们是非标准的,几乎是安全的:)是值得注意的
Endianess是字节中位的顺序。有些平台是大端,有些是小端
这可能会影响程序的跨平台性。但这将对网络通信产生最大影响。在发送或接收网络消息之前,您必须从一个终端转换到另一个终端。如果您专注于游戏性,那么设计一个游戏,并让他们实现移植不应该特别繁重。如果您在多个平台上同时实现它,它应该是直接的 但是如果你专注于效果,设计一些你觉得会“把其他人从水里吹出去”的东西,并尝试将一个游戏理念粘贴到它们上面,你就注定要失败
所以,这完全取决于您。尝试封装任何非标准扩展,如DirectX、OpenGL、SDL等。然后您只需基于平台重写这些部分
在考虑移植之前,我还想让它可以在一个操作系统上播放。我对windows API了解不多,但我在您想要支持的所有平台上设置了一个每日(或提交时)全自动构建系统。如果您在windows box上开发的某些东西在其他系统上不起作用,则生成系统应通知您“在平台x上生成失败,请参阅日志文件/附件/诸如此类了解详细信息”。它将捕获许多跨平台问题。单元测试也会有所帮助 是否从一开始就针对多个平台是一个好主意是另一个问题
就我个人而言,我会在另一个平台上开始开发,然后考虑稍后将其移植到windows;-) 否,标准gcc库中未实现这些函数。 (至少,将“sprintf_s”的include文件变灰完全没有结果。) 也许值得一看跨平台的库,比如和做一些繁重的工作 要查找的特定事物的示例:
- 输入/输出(DirectX/SDL/OpenGL)
- Win32/windows.h功能(CreateThread等)
- 在UI上使用windows控件
- 同步原语(关键部分、事件)
- 文件路径(目录分隔符、根名称)
- 宽字符实现(windows上为16位,linux上为32位)
- linux上不支持MFC(CString等)
- 如果我是你,我会使用一些可用的框架,处理平台独立性
我和一个朋友写了一个3D游戏作为业余爱好,服务器是Java的,客户端运行在Windows和Linux上。我们最终使用Ogre作为3D引擎,OpenAL作为声音引擎,这两种引擎都独立于平台,并且在LGPL下可用
我唯一真正需要单独编写的是整个套接字处理、从文件系统读取配置和系统初始化。与该计划的其他部分相比,这几乎算不上什么
最耗时的是将整个项目设置为在Windows和Linux(或Mac)下编译,尤其是当您只关注其中一个项目,而偶尔检查另一个项目是否存在问题时。如果您的团队中有一个人在生产过程中定期检查这些问题,那么您也不会因此产生太多开销
总而言之,与游戏本身的编程相比,如果使用的所有框架都是编写良好的平台无关系统,那么将其适应不同平台几乎不费吹灰之力。请记住,您正在创建一个不依赖任何操作系统细节的游戏模型。您的游戏依赖于不依赖操作系统的状态管理和算法。关键是编写游戏逻辑,而不依赖于特定的库,这意味着大量的封装 您不应该直接调用sprintf_s。您应该编写一个可以根据平台进行更改的例程、类或宏。当您可以使用可以根据不同平台定制的类或typedef时,不要使用DWORD
例如,如果你在哪里做足球比赛,那么投掷球、跑、球、球员的位置的算法可以完全在标准C++中完成,而不依赖于平台依赖。如果封装良好,您可以将游戏状态转储到一个文件中,并使用渲染程序单独显示。如果您真的想轻松进行跨平台开发,我建议您使用一个已经构建的跨平台引擎,如Unity或车库游戏,如Torque game Builder(2D) 我在这两方面几乎都没有经验,所以我不能告诉你哪一个更好,但是Torque Game builder演示版无法顺利通过第一个教程,而且他们不会像他们声称的那样在论坛上回答技术支持问题。如果你像我一样是游戏设计的新手,我可以说避免这些问题。车库游戏最重要的一点应该是他们的大力支持,我看到的是零支持,事实上只看到了一堆没有答案的“嘿,有人在吗?”帖子,所以我猜他们几乎放弃了支持他们的产品
我很惊讶没有人提到libSDL和OpenGL,因为大多数跨平台游戏都是使用这些库编写的 如果你的游戏是2D,你可以使用。游戏wri的一个好例子