2016-04-01 7 views
-1

Wenn ich eine riesige Reihe von 13k + Kacheln, die ich als Texturen auf dem Bildschirm rendern generieren will, stürzt ab und ich habe keine Ahnung, warum, das ist die Methode, die das Problem verursachtGenerieren einer sehr großen Palette von Objekten friert Programm

public ArrayList<Tile> getNewChunk(int width, int height) 
{ 
    int amountOfTilesY = height * 32; 
    int amountOfTilesX = width * 32; 
    int amountOfTiles = (amountOfTilesX + amountOfTilesY)/32; 
    ArrayList<Tile> tiles = new ArrayList<Tile>(amountOfTiles); 
    for(int i = 0; i < amountOfTilesX; i += 32) 
    { 
     for(int j = 0; j < amountOfTilesY; j += 32) 
     { 
      Tile tempTile = new DirtTile(i, j, "res/tile/DirtTile.png"); 
      tiles.add(tempTile); 
     } 
    } 

    return tiles; 

} 

Also, wenn ou könnte Hilfe bitte: D den Motor ich das Spiel zu machen, bin mit mit ist lwjgl 2, mit opengl ich, wenn

benötigen mehr Code zur Verfügung stellen kann
+1

Vielleicht möchten Sie die DirtTile Textur laden nur einmal und wiederverwenden, weil im Moment scheint es, wie Sie laden es separat für jede Kachel. Das Laden von 13.000 Texturen erfordert wahrscheinlich viel Leistung und Speicher. – javac

+0

Auf welcher Linie stürzt es ab? Auf welcher Menge von Fliesen fängt es an zu crashen? Wie groß sind die Fliesen und welches Format haben sie? – Andreas

Antwort

0

nach dem, was Sie zur Verfügung gestellt, die Problem könnte von mehreren Dingen kommen. @javec ist insofern korrekt, als das Laden der Textur einmal pro Objekt die Leistung drastisch reduzieren würde. Sie sollten die einzelne Einheit laden und ihre einzelne Einheiten-ID in der Liste verteilen.

Auch ist es unklar, basierend auf dem, was Sie zur Verfügung gestellt, ob Sie hier Puffer für jede Kachel separat erzeugen oder nicht. Wenn dies der Fall ist, sollten Sie einen einzelnen Puffer generieren und ihn auf die gleiche Weise teilen.

Je nachdem, wofür Sie diese Kacheln verwenden, können Sie eine andere Methode in Betracht ziehen. Wenn die Fliesen als ein Gelände verbunden sind, können Sie immer Ihre Masche maßstäblich angemessen und Fliesen Ihre Textur mit so etwas wie

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);