C / C ++でクロスプラットフォームゲームを作成する際のヒント/推奨事項はありますか?
C / C ++でクロスプラットフォームゲームを作成する際のヒント/推奨事項はありますか?
回答:
プラットフォーム固有のものを抽象化レイヤーの背後に隠します
これは、レンダリング、オーディオ、ユーザー入力、ファイルIOなどを意味します。実行時のパフォーマンスの低下を招くことなく抽象化するための1つの一般的なトリックは、プラットフォーム固有の実装ファイルを備えたプラットフォームに依存しないヘッダーです。
// 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を使用しないでください。続けるつもりで始めてください。
サポートする各プラットフォームのハードウェア制限を把握してください。
それ自体がクロスプラットフォームであるライブラリがたくさんあります。どこでも実行するためにOpenGLで直接記述する必要はありません。OGREは、名前を付けたい任意のプラットフォームで動作するレンダリングエンジンの優れた例です。
私の経験では、最大の懸念はビルドシステムです。WindowsでVisual Studioを使用して開発する場合、コードはLinuxでコンパイルされる可能性がありますが、簡単にビルドするのは困難です。同じビルド手順を使用してプラットフォーム固有のプロジェクトファイル(Linuxのメイクファイル、WindowsのVSプロジェクト、MacのXCodeプロジェクトなど)を生成できるCMakeのようなビルドシステムを見てください。
ファイルを保存およびロードするための関数を作成するとき、またはネットワークを介して通信するときは、エンディアンネスを忘れないでください。
fread / fwriteまたはそのような低レベルの1回の呼び出しで大きな構造を読み取る代わりに、ReadByte / WriteByteおよびReadFloat / WriteFloatを作成します。後で別のプラットフォームをターゲットにする場合、変更する場所が少なくなります。
#ifdef PLATFORM_WIN
ftwの欠如