2016-07-30 12 views
1

Ich entwickle ein Spiel in Java mit LibGDX und ich wollte zufällige Terrain-Generation. Ich fand eine Perlin Klasse online und beschloss, sie für mein Projekt zu verwenden.Perlin noise nicht generierende Zahl zwischen 1 und -1

ich zur Zeit eine einfache Weltklasse mit diesem als Konstruktor:

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); 
     } 
    } 
} 

(Karte ein 2D-float-Array ist ofcourse)

In meinem des Spiels Haupt Klasse I eine Welt schaffen, und dann ziehen es in der render() Methode wie folgt:

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(); 

bei der Ausführung Spams es im Grunde um die Konsole mit „nicht Tween -1 und 1 "und nach einiger Zeit füllt sich der Bildschirm mit Wasser Textur.

Ist es die Klasse oder verhexe ich? Wahrscheinlich Letzteres. Wie soll ich es beheben? Gibt es auch Tipps zur Optimierung? Code sieht im Moment irgendwie unordentlich aus.

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

UPDATE: Fest ich die Log-Spam, die die Rogue wies darauf hin, Art ein dummer Fehler war.

Jetzt habe ich ein anderes Problem. Es scheint nur Wasser zu erzeugen. Ich habe überprüft, was getMap()[x][y] zurückkehrte und es war im Grunde nur 0.0s und -0.0s.

+0

Willst du nicht, dass 2. "wenn" ein "sonst" sein soll? Dies würde die Notwendigkeit für Ihr anderes else und Spam-Protokoll loswerden, da diese Situation dann unmöglich wäre. – alzee

Antwort

2

Nun, ich denke, die offensichtlichste ist, dass Ihr anderes, wenn Logik ausgeschaltet ist, sind Sie zwei if Anweisungen in einer Reihe mit:

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");    } 
    } 

Die Ausrichtungsklammer ist auch ein bisschen iffy, aber versuchen mit 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"); 
    } 

Zuvor etwas unter 0 würde diesen Fehler gedruckt haben.

+0

Das scheint das Problem zu sein! Haha, ich sollte mich auf die Grundlagen konzentrieren und ich bin jetzt verrückt müde. Vielen Dank! Immer noch komisch, wie es nach einiger Zeit die Wasserstruktur gezeichnet hat. – Blub

Verwandte Themen