6

ほとんどのゲームには、リソース (モデル、テクスチャなど) が特別なファイル (Quake 3 の .pk3 ファイルなど) にパックされています。どうやら、これらのファイルは何らかの形で「マウント」され、あたかも別のファイル システムであるかのように使用されます。

これがどのように達成されるか知りたいです。これまでに思いついた唯一の戦略は、ファイルのヘッダーにオフセット サイズの情報を配置し、ファイルをメモリ マッピングして、独立した書き込み保護されたメモリのチャンクであるかのようにリソースにアクセスすることです。

私の戦略が実行可能かどうか、またより良い代替案があるかどうかを知りたいです。

ありがとう!

4

3 に答える 3

3

あなたの戦略は非常に合理的です。実際、これはファイルシステム ドライバが raw ブロック デバイスに対して行うこととまったく同じです。その実装にはどのような問題がありますか?

于 2011-03-28T18:16:45.197 に答える
3

あなたのアプローチは合理的に聞こえます。基本的に、(オプションの) メタデータを含む ISAM ファイルが作成されます。基準 (コンテンツ タイプ、使用頻度、使用場所など) に基づいてファイルをセクション (「ディレクトリ」) に分割し、セクションごとに個別のインデックス/目次を作成できます。セクションをコンテンツ タイプとして許可すると、セクションをネストして、一貫した方法で処理できます。

要件がかなり基本的なものである場合は、単純に zip/tar ファイルをコンテナーとして使用することを検討できます。いずれにせよ、これらのコードを見ることから始めるのがおそらく良いでしょう。

于 2011-03-28T18:43:59.227 に答える
3

Quake3 の正確な形式については言えませんが、必要なことを行うにはいくつかの方法があります。

  1. アーカイブ ファイル (ZIP、Tar など)
  2. 異なる種類の複合ストレージ。Windows には、Microsoft 構造化ストレージがあります。
  3. 組み込み単一ファイル データベース
  4. 仮想ファイル システム。実際のファイル システムを実装しますが、ディスク パーティションではなく別の場所 (リソース、メモリなど) に格納されます。

これらのアプローチにはそれぞれ長所と短所があります。

当社のSolFS製品は、上記の仮想ファイル システムの一例です。あなたと同様のタスク用に設計されました。

アーカイブと一部の複合ファイルの実装は、通常、線形順次構造を持っています。ファイルは、ファイルの先頭または末尾にあるディレクトリを使用して 1 つずつ書き込まれます。

一部の複合ファイル実装、データベース、および仮想ファイル システムは、ページ ベースの構造 (「ページ」は FAT または NTFS のセクターまたはクラスターに似ています) を持ち、ファイルをストレージ全体に分散させることができます。

于 2011-03-28T18:59:16.527 に答える