在C / C ++中创建跨平台游戏时,您有什么技巧/建议吗?
在C / C ++中创建跨平台游戏时,您有什么技巧/建议吗?
Answers:
将任何平台特定的东西隐藏在抽象层后面
这意味着诸如渲染,音频,用户输入和文件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文件进行构建。
使您的内容管道读取与平台无关的资产,并为每个平台输出平台特定的内容
例如,将您的纹理创作为.tga或只是.psd,然后拥有一个可以自动将其转换为所需的不同平台特定格式的管道。
不要在数据中假设特定的内存布局或字节序
平台的字节顺序,填充,对齐和字长可能有所不同。任何关心此问题的代码都必须在所有平台上进行全面测试。
随时在所有平台上进行测试
您将被特定于平台的错误所困扰。您是现在想被咬还是在尝试将游戏发布出去时被咬?
使用像opengl / sdl这样的api,当从一个平台到另一个平台时,它将给您带来最小的麻烦。
确保您知道要支持的平台。不要仅仅因为您认为将来可能要支持多平台而使用opengl。按照您的意思继续进行。
了解您要支持的每个平台上的硬件限制。
在编写用于保存和加载文件或通过网络进行通信的函数时,请不要忘记endianness。
与其创建一个ReadByte / WriteByte和ReadFloat / WriteFloat,而不是通过一次调用fread / fwrite或类似的低级操作来读取大型结构。如果以后决定使用其他平台,则可以进行更改的地方将更少。
#ifdef PLATFORM_WIN
ftw