Libgdx Terraria克隆世界需要很长时间才能创建

时间:2016-03-20 01:36:46

标签: java libgdx chunks

我开始研究libgdx中的terraria克隆并获得了tile生成。瓷砖以16x16块分开,但产生的所有块都需要太长时间。目前,我正在产生400块(102400块)。这是我如何产生块:

data = new int[width][height];
    for(int y = 0; y < height; y++){
        for(int x = 0; x < width; x++){
            data[x][y] = 1;
        }
    }
    chunks = new Chunk[chunks_x][chunks_y];
    for(int y = 0; y < chunks_y; y++){
        for(int x = 0; x < chunks_x; x++){
            chunks[x][y] = new Chunk(x, y, this);
        }
    }

Chunk类中的平铺产生代码:

tiles = new Block[World.chunkSize][World.chunkSize];
    for(int vy = 0; vy < World.chunkSize; vy++){
        for(int vx = 0; vx < World.chunkSize; vx++){
            if(world.GetTile(vx + x * World.chunkSize, vy + y * World.chunkSize) >= 1)
                tiles[vx][vy] = new Block(vx * 16 + x * World.chunkSize * 16, vy * 16 + y * World.chunkSize * 16, world.data[x * World.chunkSize + vx][y * World.chunkSize + vy]);
        }
    }

生成这个大小的世界大约需要2分钟。我知道这是一个很大的数字,但我很好奇terraria(或任何其他克隆)如何设法缩短时间。谢谢!

编辑:这是块类(http://pastebin.com/SFCkJKur)和实体类(http://pastebin.com/w3ay2nkb)。

2 个答案:

答案 0 :(得分:2)

ChunkBlock课程的目的是什么?它们是用于渲染吗?因为当你想到它时,你不需要来做到这一点。你真的只需要渲染当前时刻玩家可见的磁贴,而不再需要了。

这种性质的游戏确定了播放器的当前位置,然后确切地计算出需要渲染的块/块以及位置。

以下是两个很好的资源来帮助您开始这个问题:

另一方面,ChunkBlock类只是用于包含构成世界的数据吗?在这种情况下,您也不需要初始化它们。您应该以更轻量级的方式存储数据 - 可能在文件系统中。

答案 1 :(得分:0)

你在你的问题中提出了libgdx,这个引擎附带了一个精心设计的Map API,可以处理Tile地图并提供其他有用的功能:

关于Libgdx官方WIKI:

  

性能考虑因素

     

虽然我们尽可能快地制作渲染器,但有一个   您可以考虑采取一些措施来提高渲染性能。

     

仅使用图层中单个图块集中的图块。这会减少   纹理绑定。将不需要混合的拼贴标记为不透明。在   在你只能以编程方式执行此操作的那一刻,我们将提供方法   在编辑器中或自动执行此操作。不要过火了   层数。

查看 here 了解更多信息