有关创建跨平台游戏的任何提示?

在C / C ++中创建跨平台游戏时,您有任何提示/建议吗?

隐藏抽象层背后的任何特定平台

这意味着像渲染,audio,用户input和文件IO的东西。 在不引起运行时性能损失的情况下抽象出一个常见的技巧是具有平台特定实现文件的平台不可知的头文件:

// FileSystem.h class FileSystem { public: FileHandle OpenFile(const char * path); // other stuff... } // FileSystemWindows.cpp FileHandle FileSystem::OpenFile(const char * path) { // call windows API... } 

然后根据正确的.cpp文件为每个平台configuration构建版本。

使您的内容管道在独立于平台的资产中读取,并为每个平台输出平台特定的内容

例如,将您的纹理制作为.tga或.psd,然后创建一个可自动将这些纹理转换为您所需的不同平台特定格式的管道。

不要假设您的数据有特定的内存布局或字节顺序

平台的字节顺序,填充,alignment和字大小可能会有所不同。 任何关心的代码都必须在所有平台上进行彻底的testing。

始终在所有平台上进行testing

被特定于平台的错误所困扰。 你现在是否会被困住,或者当你试图将游戏推出门外?

  • 使用像opengl / sdl这样的API可以让你从平台到平台的最小麻烦。

  • 确保你知道你想要支持的平台。 不要仅仅因为你认为将来可能需要支持多平台而使用opengl。 开始你的意思是继续下去。

  • 了解您想要支持的每个平台上的硬件限制。

尽量避免散布#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif遍布整个代码。

有时候看起来是更简单的方法,但从长远来看这会给你带来麻烦。 您应该尝试将它们限制在自己的文件中,以便每个平台实现都是自包含的。

添加一个平台应该主要是添加新的实现文件,只需要修改现有的一些平台即可。

有很多图书馆本身是跨平台的; 你不需要直接在OpenGL中编写任何地方运行。 OGRE是渲染引擎的一个很好的例子,可以在任何你喜欢的平台上运行。

根据我的经验,最大的担忧是你的构建系统。 如果您使用Visual Studio在Windows上开发,您的代码可能会在Linux中编译,但您将很难轻松构建它。 看看像CMake这样的构建系统,它可以使用相同的构建指令来生成特定于平台的项目文件(Linux上的makefile,windows上的VS项目,Mac上的XCode项目等)。

编写保存和加载文件的function,或通过networking进行通信时,不要忘记字节顺序 。

而不是阅读一个单一的调用fread / fwrite或类似的低级别的大型结构,创建一个ReadByte / WriteByte和ReadFloat / WriteFloat。 然后,如果您稍后决定定位到不同的平台,则您将有更less的地方进行更改。