Game Makerというツールを使ったことがあるなら、それは少し似ています。サウンド、画像、その他すべてのものを取り込んで、単一の C++ 実行可能ファイルに埋め込むことができるようにしたいと考えています。ゲーム メーカーには組み込みのエディターがあり、画像が .gmk ファイルに埋め込まれており、それを開くと、画像が読み込まれ、ゲームに表示されます。彼は画像を画像としてではなく、純粋なデータとして .gmk ファイルに保存し、エディターまたは .exe に書き込まれたインタープリターによって解釈したと考えています。似たようなものを作るにはどうすればよいですか?
3 に答える
Windows のリソース システムはこのように動作するので、WinAPI や MFC アプリケーションを作成する場合は、これを使用できます。また、Qt は同じ機能を提供しますが、プラットフォームに依存しない方法です。ファイルを生のバイナリ形式で通常の C++ ファイルのバイト配列に書き込むだけなので、データとして exe にコンパイルされます。次に、通常のファイルのようにこれらのデータ ブロックにアクセスするための関数を提供しますが、実際にどのように機能するかはわかりません。おそらく、これらのバイト配列変数にアクセスするだけのファイル クラスの特別な実装です。
画像のみの場合、非常に簡単な方法はXPM形式を使用することです。
この形式は有効な C/C++ ヘッダーであるため、C++ ソース ファイルに直接インクルードして直接使用できます。
このアプローチの主な問題は、XPM が圧縮形式ではないため、大量のストレージを使用することです。結果として、実際にはこれがアイコンと小さなグラフィカル オブジェクトに使用されているのを見ただけでしたが、原則としてもっと多くのことができます。
XPM のもう 1 つの優れた点は、人間が判読できることです。ここでも、小さくてシンプルなアイコンを設計するのに最適です。
このアイデアを他の形式に一般化するには、次のようなコンパイル チェーンを作成します。
- ターゲット ファイルを ASCII (Uuencode など) としてエンコードします。
- それをソース ファイル内の単一の名前付き C 文字列に変換します。
- 名前を宣言するだけのヘッダーを作成する
- 文字列からバイナリ形式を復元する関数を定義する