2017-04-17 10 views
0

저는 Libgdx Developement를 처음 사용하고 Candy Crush와 같은 게임을하고 있습니다. 나는 배경 보드를 가지고 있으며, 그 보드 위에는 사용자가 드래그 앤 플레이를 할 수있는 다양한 색상의 동전이 있습니다. 한 가지 문제를 제외하고는 모든 코드가 올바르게 작동합니다. 사용자가 여러 포인트와 레벨을 달성하는 로직을 작성한 시점에서 레벨 업 + 숫자 오플 레벨이라는 팝업을 표시하려고합니다. 나는 배경 이미지와 글꼴의 조합으로 그 팝업을 만들었습니다. 그러나 나는 그것을 그릴 수 없습니다. 왜냐하면 나는 카메라 .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 지연과 :

여기에 전체 로직 내 코드입니다. 내가 카메라 위에이 코드를 넣으면

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

:

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); 
    } 
} 

이 코드에서 렌더링 방법 팝업을 그리기위한 것입니다 :

다음은 렌더링() 메서드 내 코드입니다. 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 가능한 경우 suggetions를 제공하십시오. –