2016-07-30 52 views
1

我正在用Java開發一個遊戲,使用LibGDX我想要隨機地形生成。我在網上發現了一個Perlin類,並決定將它用於我的項目。Perlin噪聲不生成1和-1之間的數字

我現在有一個簡單的世界級以此爲構造:

public World() { 
    Random rand = new Random(); 
    seed = rand.nextInt(); 
    Perlin perlin = new Perlin(seed); 

    for(int x = 0; x < map.length; x++) { 
     for(int y = 0; y < map.length; y++) { 
      map[x][y] = perlin.noise2(x, y); 
     } 
    } 
} 

(地圖是一個二維int數組ofcourse)

在我的遊戲的主要類我創建了一個世界,然後畫它在render()方法是這樣的:

batch.begin(); 
for (int x = 0; x < w.getMap().length; x++) { 
    for (int y = 0; y < w.getMap().length; y++) { 
     if (w.getMap()[x][y] <= 0) { 
      batch.draw(water, x * 32, y * 32); 
     } 
     if (w.getMap()[x][y] > 0) { 
      batch.draw(grass, x * 32, y * 32); 
     } else { 
      log.severe("not between -1 and 1");    
     } 
    } 
} 
batch.end(); 

一旦執行它基本上Spas控制檯與「不是吐溫-1和1「,並在一段時間後屏幕充滿了水的質感。

這是課程還是我搞亂了?可能是後者。我應該如何解決它?另外,有關優化的任何提示?代碼有點看起來凌亂。

This is the class I'm using. Posted it on pastebin because it's ~580 lines long.

更新:我固定的日誌垃圾郵件,這是一種愚蠢的錯誤,盜賊指出。

現在我面臨一個不同的問題。它似乎只是在生成水。我檢查了什麼getMap()[x][y]正在返回,它基本上只有0.0s和-0.0s。

+0

你不想讓第二個「if」成爲「其他」嗎?這將擺脫對其他人和垃圾郵件日誌的需求,因爲那樣的情況將不可能實現。 – alzee

回答

2

嗯,我認爲明顯的是,你的其他人,如果邏輯是關閉的,您使用的是連續兩個if聲明:

if (w.getMap()[x][y] <= 0) { 
     batch.draw(water, x * 32, y * 32); 
    } 
    if (w.getMap()[x][y] > 0) { 
     batch.draw(grass, x * 32, y * 32); 
    } else { 
     log.severe("not between -1 and 1");    } 
    } 

支架對準也是有點玄乎,但嘗試使用ifelse ifelse

if (w.getMap()[x][y] <= 0) { 
     batch.draw(water, x * 32, y * 32); 
    } else if (w.getMap()[x][y] > 0) { 
     batch.draw(grass, x * 32, y * 32); 
    } else { 
     log.severe("not between -1 and 1"); 
    } 

此前低於0東西會一直打印的錯誤。

+0

這似乎是問題所在!哈哈,我應該刷新基礎知識,現在我瘋了。謝謝!一段時間後,它如何繪製水紋理仍然很奇怪。 – Blub