2012-08-24 59 views
0

我正在嘗試爲2D地圖遊戲製作地圖生成器(類似於文明遊戲 - 我希望能夠創建小島嶼或大洲等) )。我找到了一篇幾乎可以完成我想要的內容的文章,但是它是用flash寫的。貌似有一個方便的功能,從柏林噪聲生成位圖:關於使用Perlin噪聲生成瓷磚地圖的基本問題

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)。所以現在我被困在試圖實現perlin噪聲自己(基本上找到一個純java實現和複製/粘貼它)。

我只是想了解背後使用Perlin雜的基本原理 - 我的基本認識:

  1. 定義要地圖的大小(在我的案件約100×50瓦)。
  2. 初始化perlin噪聲對象(設置像頻率等參數 - 不太確定這些參數如何影響像島嶼大小等東西,但暫時擱置)。
  3. 迭代我的地圖中的每個圖塊,並向perlin噪聲對象詢問一個值。返回的值可以被解釋爲我猜測的高度值。
  4. 現在根據高度值指定一個圖塊類型。

迭代碼可能看起來像:

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

它方便地內置了一個柏林噪聲函數

閃存BitmapData類: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#perlinNoise()

感謝

回答

0

給出適當的初始化,您的迭代代碼應該盡我所能地工作。那就是:如果你想把二維珀林噪聲限制到水,岸,山和山。

This page對Perlin噪聲和僞代碼示例有一些有用的解釋。實質上,該算法將噪聲函數與頻率增加和幅度降低相加。