2017-04-17 10 views
0

私はLibgdx Developementを初めて使用しています。私はCandy Crushのようなゲームで作業しています。私はバックグラウンドボードを持っています。そのボードの上に、ユーザーがドラッグアンドプレイできるさまざまな色のコインがいくつかあります。 1つの問題を除いて、すべてのコードは正常に動作しています。ここでは、ユーザーが多数のポイントとレベルを達成するロジックを作成しました。その時点でLevel Up + NumberOfLevelというポップアップを表示します。私は背景画像とフォントの組み合わせでそのポップアップを作成しました。しかし、私はcamera.update()の後にそれを呼び出すので、私はそれを描くことができません。ここでLibGDXでCamera.Updateの後にスプライトを描画できない

は全体のロジックのための私のコードです:

private void initLevelLogic() { 

    if (baseLevel == 0) { 
     baseTime = 180; 
     basePoint = 400; 

     gameTime = baseTime; 

     progressBar = new ProgressBar(0, baseTime, 1, false, progressBarStyle); 
     progressBar.setValue(baseTime); 

     baseScoreToMinus = 0; 

     baseLevel++; 
    } else { 
     Log.d("Runnable", "RUNNABLE CALLED"); 

     initLevelUpAnimation(baseLevel); 

     Timer.schedule(new Task() { 
      @Override 
      public void run() { 
       baseTime -= 10; 

       basePoint = basePoint + (100 * baseLevel); 

       /** 
       * Game time will be used to calculate in render() method which is going to be in float. 
       */ 
       gameTime = baseTime; 

       progressBar = new ProgressBar(0, baseTime, 1, false, progressBarStyle); 
       progressBar.setValue(baseTime); 

       baseScoreToMinus = 0; 

       baseLevel++; 
       delayTime = 0; 


       stopGameObjects = false; 
      } 
     }, 5.0f); 
    } 
} 

private void initLevelUpAnimation(int level) { 
    levelUp = new Sprite(levelUpBG); 
    levelUp.setSize(250, 250); 
    levelUp.setPosition(gamePlayBG.getWidth()/2 - levelUp.getWidth()/2, 
      gamePlayBG.getHeight()/2 - levelUp.getHeight()/2); 

    stopGameObjects = true; 
} 

私はrender()メソッドにスプライトを描くことができますので、私は遅れてブール、stopGameObjectsを使用していました。ここで

はrender()メソッドの私のコードです:

public void render(float delta) { 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    game.batch.begin(); 

    game.batch.setProjectionMatrix(camera2.combined); 

    game.batch.draw(gamePlayBG, 0, 0); 

    if (gameOver != true) { 
     //Log.d("render------------", "render: "+ delta); 

     progressBar.draw(game.batch, 1); 

     progressBar.setPosition(115, 700); 
     progressBar.setHeight(15); 
     progressBar.setWidth(270); 

     game.gameTopFonts.draw(game.batch, "Level " + baseLevel + " - ", 140, 750); 
     game.gameTopFonts.draw(game.batch, (basePoint - baseScoreToMinus) + " Points to Go", 225, 750); 

     if (score == 0) { 
      game.scoreFonts.draw(game.batch, score + "", 300, 810); 
     } else if (score < 100) { 
      game.scoreFonts.draw(game.batch, score + "", 280, 810); 
     } else if (score < 1000) { 
      game.scoreFonts.draw(game.batch, score + "", 260, 810); 
     } else { 
      game.scoreFonts.draw(game.batch, score + "", 245, 810); 
     } 
    } 

    //Writing this here will give output shown in the screenshot 
    if (stopGameObjects) { 
     levelUp.draw(game.batch); 

     game.levelUpFont.drawMultiLine(game.batch, "Level " + baseLevel + 1 + "\n" + "KEEP GOING", gamePlayBG.getWidth()/2, 
       gamePlayBG.getHeight()/2); 

    } 

    camera.update(); 

    game.batch.setProjectionMatrix(camera.combined); 

    if (lineHud.size > 1) { 
     for (Sprite sprite : this.lineHud) { 
      sprite.draw(game.batch); 
     } 
    } 

    for (int i = 0; i < gameObjects.size; i++) { 
     gameObjects.get(i).draw(game.batch); 
    } 

    for (Sprite sprite : this.scoreHud) { 
     sprite.draw(game.batch); 
    } 
} 

このコードでは、メソッドをレンダリングポップアップ描画するためです:

if (stopGameObjects) { 
    levelUp.draw(game.batch); 
    game.levelUpFont.drawMultiLine(game.batch, 
      "Level " + baseLevel + 1 + "\n" + "KEEP GOING", 
      gamePlayBG.getWidth()/2, 
      gamePlayBG.getHeight()/2); 
} 

私はカメラの上にこのコードを配置する場合。 update()スクリーンショットに出力が表示されます。ポップアップはコインの後ろにあります。それをコインの上に表示するには、gameobjectを描画するforループの後に置く必要がありますが、動作しません。私が3日間このことに固執しているように、あなたの提案をお願いします。

enter image description here

答えて

3

テキストの上にゲームの残りの部分を描いているからです。

これを修正するには、他のすべてのスプライトを描画した後に、テキストの描画を移動することができます。再度setProjectionMatrix()に電話することを忘れないでください。

if (stopGameObjects) { 
    game.batch.setProjectionMatrix(camera2.combined); 

    levelUp.draw(game.batch); 
    game.levelUpFont.drawMultiLine(game.batch, 
      "Level " + baseLevel + 1 + "\n" + "KEEP GOING", 
      gamePlayBG.getWidth()/2, 
      gamePlayBG.getHeight()/2); 
} 
+0

ありがとう。あなたは人生の節約になります:) –

+0

私は本当に助けてくれてありがとう@Vallentin。私はもう1つの賛成が必要です。私はまた、このポップアップをアニメートしようとしています:https://stackoverflow.com/questions/43465424/unable-to-animate-sprite-in-libgdx-using-tween できればこれであなたのsuggetionsを与えてください。 –

関連する問題