私は最近、手続き型の世界を作成する方法について読んだことがあります...しかし、どうやって保存するのですか?
TerrariaやMinecraftのようなゲームでは、ユーザーはランドスケープを自由に変更できますが、その世界を最初のシードから再作成することはできません。手続き型だが修正可能な世界を保存するためにどのようなテクニックが使用されていますか?
私は最近、手続き型の世界を作成する方法について読んだことがあります...しかし、どうやって保存するのですか?
TerrariaやMinecraftのようなゲームでは、ユーザーはランドスケープを自由に変更できますが、その世界を最初のシードから再作成することはできません。手続き型だが修正可能な世界を保存するためにどのようなテクニックが使用されていますか?
回答:
ワールドの生成に使用したシード、および変更をアトミックな「コマンド」またはそれらの結果として保存します。
次に、保存したゲームをロードするときに、次のことを行います。
更新:そしてもちろん、リソースが利用可能な場合(Minecraftで見られるように)、生成されたワールドを通常のワールドと同じように保存するオプションがあります。この場合、タイルごとに、既にアクセスされた世界の一部のみを保存する必要があります(そうでない場合、手続き型生成はほとんど無意味になります)。これはより多くのHDDやデータベースリソースを消費しますが、ゲームのロード時に必要なCPUパワーは少なくなります。
手続き的に生成された世界の保存は、タイルマップデータの保存と同じです。
世界がさまざまな種類のタイルで構築されていると仮定すると、世界をバイナリ形式で保存することができます。
同じ方法を使用して、ボクセルベースのマップも保存できます。
頂点ベースのマップモデルの保存はより複雑です。
そのテーマについて詳しく説明していただけますか?
Minecraftについては、世界でボクセルが使用されているため、保存が非常に簡単です。詳細については、こちらをご覧ください。
http://www.minecraftwiki.net/wiki/Region_file_format
http://www.minecraftwiki.net/wiki/Level_Format
すでに述べたように、世界を生成するために使用されるシードを保存し、保存形式を世界の構成要素(キューブ、アトムなど)に適合させます。
メモリに世界を保存するために使用しているデータ構造は、ディスクへの書き込みおよび読み取りのテンプレートとして使用できます。ディスクのデータが利用できない場合、ゲームの手順部分はこれらのデータ構造を最初に満たします。次に、メモリから領域をアンロードする準備ができたら、生成または変更されたとおりにディスクに書き込みます。
新しい領域をメモリにロードする準備ができたら、まず、以前に生成されてディスクに保存されたかどうかを確認します。ある場合は、プロシージャ生成アルゴリズムからではなく、ディスクからロードします。
通常、これは地形の塊で行われます。各チャンクを独自のファイルに保存するか、ルックアップテーブルを使用して単一のファイルにデータを含むより複雑なディスク構造を作成できます。データをディスクに保存する良い方法については、他にも質問があります。