Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨平台游戏开发需要寻找什么?_C++_Linux_Macos - Fatal编程技术网

C++ 跨平台游戏开发需要寻找什么?

C++ 跨平台游戏开发需要寻找什么?,c++,linux,macos,C++,Linux,Macos,我将在大约3周后开始一个游戏,我真的希望游戏至少能在另一个平台(linux、MacOS)上运行,但我的团队认为这需要大量的工作。我已经准备好了,但是我想知道我应该注意哪些东西不能移植到linux(除了像DirectXsound这样的Windows特定API之外) 我一直在网上阅读,Windows的“U s”功能,如sprintf\u s似乎只存在于Windows上;这是正确的还是它们也在linux上实现了?对于“安全”功能:它们是非标准的,几乎是安全的:)是值得注意的 Endianess是字节中

我将在大约3周后开始一个游戏,我真的希望游戏至少能在另一个平台(linux、MacOS)上运行,但我的团队认为这需要大量的工作。我已经准备好了,但是我想知道我应该注意哪些东西不能移植到linux(除了像DirectXsound这样的Windows特定API之外)


我一直在网上阅读,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的一个好例子