2016-08-31 8 views
0

現在、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); 
     } 
    } 
} 

答えて

0

私はこの問題を自分で解決しました。小道具のforループでは、xをleftBoundからScreenValues.screenWidth + leftBoundに移動する必要がありました。これは、小道具xの位置がスクリーンから外れているので、小道具が画面の左側に来るときにテクスチャがポップすることができますが、これは小さな修正になります。

関連する問題