2017-04-17 87 views
0

我是Libgdx Developement的新手,我正在开发一款类似于Candy Crush的游戏。我有一个背景板,在该板上方有许多具有不同颜色的硬币,用户可以拖动和玩。除了一个问题之外,所有代码都可以正常工作,其中我创建了一个逻辑,用户可以实现多个点和级别,此时我想要显示一个弹出窗口,说明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; 
} 

我使用了一个布尔值,stopGameObjects所以可以借鉴render()方法精灵。

这里是我的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); 
    } 
} 

这段代码在Render方法绘制弹出:

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

如果我把上面的相机这个代码。 update()我得到输出显示在屏幕截图中。弹出在硬币后面。为了显示它上面的硬币,我需要把它放在for循环绘制gameobject之后,但它不起作用。请给出你的建议,因为我坚持了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的帮助。我需要一个更多的青睐。我也试图动画这个弹出:https://stackoverflow.com/questions/43465424/unable-to-animate-sprite-in-libgdx-using-tween 如果可以的话,请给你的建议。 –