无法以编程方式在libgdx中铺设砖墙

时间:2015-02-23 22:16:58

标签: java android libgdx

我正在尝试为学校项目重建砖墙。砖墙看起来像这样,但填满整个屏幕:brick wall

目前,我能够看到这样:current impl我正在使用的纹理文件是:bricktexture

我用来执行此操作的代码如下所示: 确定纹理大小的常量文件:

public static final String TEXTURE_BRICK = "tiles/Bricks.png";
public static final Vector2 TEXTURE_BRICK_SIZE = new Vector2(8, 12);
/* Bricks */
public static final Vector2 TILE_LOCATION_LEFT_BRICK = new Vector2(12, 120);
public static final Vector2 TILE_LOCATION_RIGHT_BRICK = new Vector2(0, 120);

从上面的代码中你可以看到我基本上只选择了最后一块砖,这实际上是一块双砖。我将它分成两半,并尝试交替每一半,从每一行的另一半开始。你可以在这里看到这个:

for (int i = CANVAS_WIDTH; i >= 0; i--) {
        for (int j = CANVAS_HEIGHT; j >= 0 ; j--) {
            if (i % 2 == 0)
                addDrawable(String.valueOf("brick: " + i + "," + j), new BrickTile(null, new Vector2(i, j), "right"));
            else
                addDrawable(String.valueOf("brick: " + i + "," + j), new BrickTile(null, new Vector2(i, j), "right"));
        }
    }

addDrawable基本上只是将一个特定的图块添加到我在给定坐标的屏幕上绘制的图块集合中。

最后,我正在使用的相机设置是:

    mGameContext.setCamera(new OrthographicCamera((float)CANVAS_WIDTH, (float)CANVAS_HEIGHT ));
    mGameContext.setViewport(new StretchViewport(CANVAS_WIDTH, CANVAS_HEIGHT));
    mGameContext.getCamera().position.set(mGameContext.getCamera().viewportWidth / 2f,
            mGameContext.getCamera().viewportHeight / 2f, 0);

您看到的常数是:

private static final int CANVAS_WIDTH = 40;
private static final int CANVAS_HEIGHT = 36;

这些值表示我想要每排40(一半)砖和36排砖。当两块砖放在一起时(如上面的砖墙图片所示,每排应该有20块。

如果你从我的设备看截图,你会发现只有一半的纹理正在被绘制。而且每块砖之间都有很多黑色的缝隙。如果我将砖纹理大小更改为整个砖的长度(8x24px而不是8x12px),它们在行内相互重叠(因此至少没有垂直间隙)但仍然存在水平间隙。

我尝试过很多改变纹理大小,相机大小,视口大小等的排列,我只是无法选择合适的设置来使其工作。

任何有过这方面经验的人都可以建议一个解决方案,以便我可以继续尝试手动铺砖并实际开始在砖头上绘制东西吗?

编辑:如果需要,这里是BrickTile类的基本外观:

setTilesetTexture(new Texture(Gdx.files.internal(Constants.TEXTURE_BRICK)));
    setTextureRegions(new HashMap<String, TextureRegion>());
    setTileSize(Constants.TEXTURE_BRICK_SIZE);
    if (type == "left") {
        addTextureRegion(type, Constants.TILE_LOCATION_LEFT_BRICK);
        setActiveRegion(type);
    }
    else if (type == "right") {
        addTextureRegion(type, Constants.TILE_LOCATION_RIGHT_BRICK);
        setActiveRegion(type);
    }

0 个答案:

没有答案