2D タイルマップ ゲーム用のマップ ジェネレーターを作成しようとしています (Civilization のようなゲームに似ています。小さな島や大きな大陸などを作成する機能が必要です)。私がやりたいことをほぼ実行する記事を見つけましたが、それはフラッシュで書かれています。パーリン ノイズからビットマップを生成する便利な関数があるようです。
class BitmapData
function perlinNoise(
baseX:Number,
baseY:Number,
numOctaves:uint,
randomSeed:int,
stitch:Boolean,
fractalNoise:Boolean,
channelOptions:uint = 7,
grayScale:Boolean = false,
offsets:Array = null):
これは記事で使用されています(ただし、Javaを使用しています)。だから今、私は自分でパーリンノイズを実装しようとして立ち往生しています(基本的には、純粋なJava実装を見つけてコピー/貼り付けます)。
私はパーリンノイズを使用する背後にある基本原則を理解しようとしています-私の基本的な理解:
- 必要なマップのサイズを定義します (私の場合は約 100 x 50 タイル)。
- パーリン ノイズ オブジェクトを初期化します (周波数などのパラメーターを設定します。これらのパラメーターが島のサイズなどにどのように影響するかはよくわかりませんが、しばらくの間置いておきます)。
- マップ内の各タイルを反復処理し、パーリン ノイズ オブジェクトに値を尋ねます。返された値は、私が推測している高さの値として解釈できます。
- 次に、高さの値に基づいてタイル タイプを割り当てます。
反復コードは次のようになります。
for (int x = 0; x < 100; x++) {
for (int y = 0; y < 50; y++) {
int height = perlin.getValue(x, y);
if (height < 5); // this tile is water
else if (height < 20); // this tile is shore
else if (height < 40); // this tile is hill
else // this tile is mountain
}
}
それは一般的に正しいですか?それは少なくとも出発点になるでしょう。
私が探している記事 (フラッシュで書かれた): http://www.nolithius.com/game-development/world-generation-breakdown
便利なパーリン ノイズ関数が組み込まれている Flash BitmapData クラス: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#perlinNoise ()
ありがとう