我正在学习用libgdx创建一个简单的游戏并且已经取得了一些成功。 现在,我想知道用于创建简单的isomatricStagged世界的最佳方法。
即使我遇到一些相机问题,我已经实现了地图,渲染并使用了一个凸轮。
我想知道的是,我应该使用Box2d并包含我的地图以获得界限吗?或者我应该只为地图渲染一个二维数组(使用超过100x100的瓷砖后,这个数字真的很慢)。
thabnks用于粗略概述或获取这些信息的一些链接。 =)
也在https://gamedev.stackexchange.com/questions/140750/creating-a-isomatricstagged-map-with-libgdx打开了
答案 0 :(得分:0)
不确定你想用盒子2D做什么,但是对于100x100的瓷砖来说阵列不应该很慢,但除非你的循环将绘制成千上万的屏幕外资产,否则你只需要绘制所需的东西。为交错的地图计算这个非常简单:
Tiles X position in 2D array = worldX / tileWidth;
Tiles Y position in 2D array = worldY / (TileHeight / 2); // Since they overlap half on y axis.
因此,如果worldX / worldY位于相机的左下角或中心,则可以更改绘制循环以仅绘制屏幕上的内容。您可以计算左上角和右下角的图块,然后迭代。
Gridpoint topLeft; //Calculate based on camera position.
Gridpoint bottomRight; //Calculate based on camera position.
for (int y = bottomRight.y; y <= topLeft.y; y++)
{
for (int x = topLeft.x; x <= bottomRight.x; x++)
{
drawTile[x,y];
}
}
现在你可以拥有1024x1024的地图而不会有麻烦。但是,由于存储了大型地图数组,因此确实需要大量内存。这就是为什么你应该只在Tile
对象中保留必要的数据,而不是引用特定纹理的纹理int
。