2011-07-24 17 views
1

ねえだから私はMinecraftのようなゲームはすることができますマルチプラットフォームは、彼らが保存または他のリソース保存することができ、フォルダや、など表示されているディレクトリの作成方法を思ったんだけど?非プラットフォーム固有の方法で保存してフォルダ(ビジュアルディレクトリ)を作成/埋め込む方法は?

Boost :: Filesystem関連の方法でこれを行う方法がわかっている場合は、thisと答えてください。

+0

本当にgamedev関連 – bummzack

答えて

3

Minecraftの場合、ファイルシステムの処理を抽象化してJavaになっているので、CreateDirectory()のようなものへの呼び出しは基本的な関数呼び出しを書き直さなくてもどのOSでも動作します。これは、Javaが仮想マシン(JVM)上で実行され、JVMがOS固有の呼び出しを処理してファイルシステムを処理するためです。これはJavaの利点です。ほとんどの解釈言語(ジャストインタイム準拠言語)は、プログラマからOS固有のファイルシステムコマンドを抽象化できるため、このように動作します。

しかし、特定のアーキテクチャに準拠しているC++のようなものでは、問題はより複雑です。各OSは、ファイルとディレクトリの操作を処理するための異なる機能セットを持つことができます。また、異なるプラットフォームに移植されたゲームでは、ポートの変更時に変更されることがあります。この場合、Boostなどのライブラリは他の言語と同じような抽象化を可能にするので便利です。ゲームでBoostを使用しない場合、プログラマは通常、再利用と可読性の理由から、ソートライブラリを作成します。

2

あなたが思うほど難しいことではありません。 CまたはC++では、コンソールから離れていれば、対処する必要がある関数は2つあります。Windows関数とPOSIX関数です。また、POSIX関数のほとんどはWindows上にも存在します。いくつか#ifdefのもので、クロスプラットフォームのファイルシステムの最小限のレイヤーを持っています。

もっと使いやすくしたい場合は、Boost :: Filesystemを使用してください。

CまたはC++を使用していない場合は、プログラミング言語がこれらの抽象化をネイティブに提供する可能性があります。

コンソールをカバーしたい場合は、コンソールごとに別のAPIセットが必要になります。本当に意味するのは、コンソールのための余分な#ifdef'ingか、そのコンソールに適切なバインディングがない言語を使用している場合、それらのバインディングを記述することだけです。

関連する問題