現在、Wormsのようなゲームに取り組んでいます。私はランダムなLevelを生成します。これは対応するyを持つ各xの点の配列を保持します。また、私はいくつかのxの値を持つ2つの配列を持っています、そこで私は木と小屋を配置します。私はOrthographicカメラと、ユーザーが画面に触れると、カメラを移動する翻訳方法を使用します。大きなレベルを持たせるために、私は現在表示されている部分だけの地図をレンダリングすることに決めました。そのために私はバックグラウンドアクタを持っています。バックグラウンドアクタはその情報からカメラの現在の位置を取得します。マップの対応する部分をサーフェス配列のレベルクラスから取得します。次に、この情報をShapeRendererでレンダリングします。それから私は小道具(木や小屋)をレンダリングします。問題は、画面をドラッグすると、小道具がサーフェスと整列していないことです。たとえば、地図を左に移動し、サーフェスが小道よりも左に速く移動しています。私は既にSpriteBatchとShapeRendererの両方の投影行列を設定しようとしましたが、それは役に立ちませんでした。 コード:Libgdx ImageとShapeRendererはx軸で異なる動作をします
@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);
}
}
}