2016-08-31 49 views
0

我目前正在研究類似蠕蟲的遊戲。我生成隨機水平,其中包含每個x與相應的y的點數組。另外我有兩個數組,其中有一些x值,然後放置樹木和小屋。當用戶觸摸屏幕時,我使用Orthographic相機和翻譯方法來移動相機。爲了達到更高的水平,我決定只渲染當前可見部分的地圖。因爲我有一個BackgroundActor,它從相關信息中獲取相機的當前位置,我使用表面數組從水平類中獲取地圖的相應部分。然後我用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的位置在屏幕外,但這只是一個小小的修正。