我目前正在开发类似蠕虫的游戏。我生成随机级别,其中每个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);
}
}
}
答案 0 :(得分:0)
我自己解决了这个问题。在道具的for循环中,我需要从leftBound到ScreenValues.screenWidth + leftBound运行x。当道具到达屏幕的左侧时,这仍然给我纹理弹出,因为道具x位置不在屏幕上,但这将是一个小修复。