30

私は2Dタイルエンジンを開発しており、現在、マップ生成アルゴリズムに取り組んでいます。

私は通常、次のような単純なハイトマップ生成に関係する基本的なものを試しました

  • 丘の世代
  • パーリンノイズ
  • ダイヤモンドスクエア

しかし、私はいつも同じ問題を抱えています。この種のアルゴリズムは、高さコンポーネントもあるタイルマップを処理する場合に適しているようですが、これは私の場合ではありません。

私は基本的に草、海、砂漠などのスプライトを持っていますが、生成された高さに応じてマップ内に配置するべきではなく、次のようなものです。

  • すべては海から始まります
  • 島はマップの中央に配置されます(これは、私が試したアルゴリズムがほとんど失敗した場所です)
  • 砂漠が生成されます(それらは周りのランダムなスポットのようになります)
  • 山と丘のチェーンがスポーンされます(ヘビのようになります)

どのようなアプローチを試すべきですか?

必要なことを実行するための特殊なアルゴリズムを開発することで、サブコンポーネントの問題(砂漠、丘、山など)を解決しました(たとえば、山はある地点から始まり、曲がる可能性のある方向をたどります)が、基本的な島(パンゲアまたは何度ものサイズにカスタマイズ可能)。

私が探しているものは、文明アルゴリズムのようなものです。

代替テキスト

4

2 に答える 2

17

ランダムな地形を作成するために、他の人が「アリ」を使用することと呼んでいるアプローチを使用しました。使用されたアプローチの説明:

まず、特殊なタイルクラスの2次元の長方形配列(x、y)を使用してタイルマップを生成しました。タイルクラスは、ドローポイントや地形タイプなどのタイル関連情報を保持します。

次に、特別な「ant」クラスを作成しました。これは、タイルマップの周りを「ステップ」する非表示のエンティティと考えることができます。アリが新しいタイルに移動するたびに、基礎となる地形タイプが変更されます。アリは8方向に移動でき、1タイル移動するたびに方向が変わります。各ステップの後に進む方向はランダムです。

私は、一定またはランダムな量のアリを、一定またはランダムな量の寿命でスポーンします。ライフタイムは、削除される前にトラバース/ステップすることができるタイルの量です。

最も一般的な地形の種類を制御できるようにするために、「地形タイプ」配列を作成します。この配列には、地形タイプのリストが含まれています(基本的にはintのみ)。すべてのタイプの地形間で均等なバランスをとるために、各地形タイプの1つだけを地形タイプ配列に追加します。特定の地形タイプをより一般的にしたい場合は、その特定の地形タイプを使用して、配列にさらにエントリを追加します。

次に、アリが変更する地形を決定する必要がある場合、配列インデックスとしてランダムな整数を使用して、地形タイプの配列でルックアップを実行します。

パラメータ(アリの量、アリの寿命、地形タイプの配列)を微調整する必要がありますが、これまでのところ、いくつかの非常に優れた地形を実現しています。

たとえば、特殊なパターンで移動するなど、より洗練されたタイプのアリのクラスを使用することで、さらに強化できます。海に信頼できる島を作成するには、アリの動作を変更して、アリの動作にいくつかの制約を持たせることができます。移動する方法(土地の長い「スパイク」、非常に分散した小さな島などがランダムに発生しないようにします)。

以下は、アリのアプローチを使用して作成した小さなアプリによって手続き的に生成された、フォレストのタイルマップの例です。これがあなたの道にあなたを設定できることを願っています!

アプリのソース(VB.NET)はGithubで入手できます

手続き的に生成された森林セクションの2Dタイルマップ

于 2011-01-26T01:26:34.013 に答える
16

[丘の生成、パーリン、ダイアモンドスクエア] ...この種のアルゴリズムは、高さコンポーネントもあるタイルマップを処理する場合に適しているようですが、私の場合はそうではありません。

しかし、それはあなたの場合です。山は平野より高く、平野は水より高い。

                        ___/
                    ___/ ___ Mountain cutoff
                ___/
         ______/
    ____/ ___ Water cutoff
__/

データを量子化して、1つのレベルのセットの間にある場合は、1つのタイプのタイルとしてカウントされ、異なる範囲にある場合は、異なるタイプのタイルとしてカウントされます。ある程度の詳細を捨てることになりますが、それでも、生成しているノイズのタイプに一致するアウトラインが得られます。

おそらくかなりの調整が必要であり、他の土地の特徴(通行不能な山以外)を自分で生成する必要がありますが、コンテンツ生成ソリューションでは多くの調整が必要になります。

于 2011-01-16T03:34:41.193 に答える