生成一大堆对象会冻结程序

时间:2016-04-01 10:47:16

标签: opengl lwjgl

当我生成一个巨大的13k +瓷砖阵列时,我想将其作为纹理渲染到屏幕上,它会崩溃,我不知道为什么,这是造成问题的方法

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;

}

所以如果你可以请求帮助:D 我用来渲染游戏的引擎是lwjgl 2,使用opengl 如果需要,我可以提供更多代码

1 个答案:

答案 0 :(得分:0)

根据您提供的内容,问题可能来自多方面。 @javec是正确的,因为每个对象加载一次纹理会大大降低性能。您应该加载单个单元并在整个列表中分发其单个单元ID。

此外,根据您提供的内容,不清楚您是否在此处单独为每个磁贴生成缓冲区。如果是这样,您应该生成一个缓冲区并以相同的方式共享它。

根据您使用这些图块的计划,您可以考虑使用其他方法。如果切片作为地形连接,您可以始终适当地缩放网格并使用类似

的方式平铺纹理
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);