LibGDX简单的2d块映射渲染

时间:2013-11-17 13:27:09

标签: java android libgdx

我正在尝试渲染2D块图,但它比我想象的更难。

让我们看看我做了什么

创建二维数组,即地图:

map = new Block[w * h];

Block是我创建的非常简单的类..不用担心。
现在我实际上试图渲染它,我知道非常愚蠢 -

int WidthMapRender = ResX / Block.WIDTH;

int HeightMapRender = ResY / Block.HEIGHT;

for(int y = 0; y < HeightMapRender; y++) {
    for(int x = 0; x < WidthMapRender; x++) {
        int mapPos = ((player.posy - HeightMapRender / 2) + y) * Assets.map.width + ((player.posx - WidthMapRender / 2) + x);
        if(Assets.map.map[mapPos].TEXTURE != null) {
            batch.draw(Assets.map.map[mapPos].TEXTURE, (x * Block.WIDTH), (y * Block.HEIGHT), Block.WIDTH, Block.HEIGHT);
        }
    }
}

Holy Shit,我知道,这是渲染地图最糟糕的方式,但我找不到更好的方法 有人可以帮助我吗?我对游戏开发很陌生。

1 个答案:

答案 0 :(得分:0)

如果您不想使用Tiled和TiledMapRenderer,则可以使用2D数组而不是1d。 map = new Block[MAP_WIDTH][MAP_HEIGHT]。如果你使用相机,你实际上应该不需要像素一样。您可以使用:camera = new OrthographicCamera(MAP_WIDTH, MAP_HEIGHT)。然后将SpriteBatchs投影矩阵设置为:Batch.setProjectionMatrix(camera.combined)。你现在绘制凸轮协调。请注意,凸轮0,0坐标现在位于屏幕的中间位置,因此请使用camera.translate(MAP_WIDTH / 2, MAP_HEIGHT / 2)移动它并调用camera.update()。您可以开始批处理并在for循环中绘制块:

for (int i = 0; i < map.length; i++) {
    for (int j = 0; j < map[i].length; j++) {
        if (map[i][j] != null)
           batch.draw(blocktexture, i, j, 1(Width in your Worldunit), 1(Height in your Worldunit));
    }
}