我正在尝试渲染 2D block 图,但它比我想象的要难。
让我们看看我做了什么
创建了二维数组, map :
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);
}
}
}
天啊,我知道,这是渲染 map 的最糟糕的方法,但我找不到更好的方法。
有人可以帮助我吗?
我对游戏开发真的很陌生。
最佳答案
如果您不想使用 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 循环中绘制 block :
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));
}
}
关于java - LibGDX 简单的二维 block 图渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031188/