Libgdx Image和ShapeRenderer在x轴上的行为不同

时间:2016-08-31 07:27:44

标签: android libgdx

我目前正在开发类似蠕虫的游戏。我生成随机级别,其中每个x都包含一个点数组,其中包含相应的y。我还有两个带有一些x值的数组,然后我放置了树和小屋。当用户触摸屏幕时,我使用正交相机和translate方法移动相机。为了达到很高的水平,我决定只为当前可见的部分渲染地图。因为我有一个BackgroundActor,它获取相机的当前位置,从该信息我得到我的地图的相应部分从水平类与表面数组。然后,我使用ShapeRenderer呈现此信息。然后我渲染道具(树木和小屋)。问题是,当我拖动屏幕时,道具与表面不对齐。例如:我将地图移动到左侧,并且表面向左移动得比道具更快。我已经尝试为SpriteBatch和ShapeRenderer设置投影矩阵,但它没有帮助。 代码:

@Override
public void draw(Batch batch, float parentAlpha) {
    setBounds(); //gets the index for my map array from the camera
    ShapeRenderer shapeRenderer = AndroidLauncher.gameScreen.shapeRenderer;
    batch.end(); //needed, because otherwise the props do not render
    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
    for (int x = 0; x < ScreenValues.screenWidth; x++) {
        int y = level.getYForX(x + leftBound);
        shapeRenderer.setColor(level.getUndergroundColor());
        shapeRenderer.rectLine(x, 0, x, y - level.getSurfaceThickness(), 1);
        shapeRenderer.setColor(level.getSurfaceColor());
        shapeRenderer.rectLine(x, y - level.getSurfaceThickness(), x, y, 1);
    }

    shapeRenderer.end();
    batch.begin();

    for (int x = 0; x < ScreenValues.screenWidth; x++) {
        int y = level.getYForX(x + leftBound);
        if (level.getPropForX(x) != Level.PROP_NONE) {
            if (level.getPropForX(x) == Level.PROP_TREE) y -= 10;
            Image imageToDraw = getImageFromPropId(level.getPropForX(x)); //Images are setup in the create method of my Listener
            imageToDraw.setPosition(x, y);
            imageToDraw.draw(batch, parentAlpha);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。在道具的for循环中,我需要从leftBound到ScreenValues.screenWidth + leftBound运行x。当道具到达屏幕的左侧时,这仍然给我纹理弹出,因为道具x位置不在屏幕上,但这将是一个小修复。