java - LibGDX 简单的二维 block 图渲染

标签 java android libgdx

我正在尝试渲染 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/

相关文章:

java - Libgdx 动画不起作用

html - LibGDX - HTML5 运行和部署

Java - 在另一个数组中使用数组(使用 LibGDX 的平台游戏)

android - 每个设备上的速度和距离都不一样

android - 如何修复错误 : "invalid item ' Flutter for Android' in the dependencies list"

java - Camel Main处理大文件并停止路由并退出JVM

java - 检索泛型类型的类实例而不将泛型作为输入

android - Alert.alert在React Native中不适用于IOS

java - 在android中显示之前修改字符串值

JAVA使用三元运算符调用方法