2016-09-22 3 views
0

이 사이트는 이미 내 게임을 만드는 과정에서 많은 도움을 주었지만 지금은 좀 고생했습니다. 그래서 누군가가 나를 도울 수 있기를 바랍니다.libgdx 게임은 디버깅 중에는 작동하지만 에뮬레이터에서는 작동하지 않습니다.

저는 현재 libgdx로 안드로이드 스튜디오에서 게임을 만들려고합니다. 구덩이와 장애물이있는 아주 간단한 도약과 달리기 게임입니다. 사용자는 3 가지 생명체를 가지며 3 가지 심장 모양의 질감으로 표시됩니다. 플레이어가 장애물 중 하나와 충돌하면 하트 중 하나가 채워진 상태에서 비어있는 상태가됩니다. 문제는 : 디버깅하는 동안 완벽하게 작동하지만 안드로이드 타블렛에서 실행할 때 문제가되지 않습니다. 그것은 하나의 마음 만 비우지 만, 내 GameOverState가 나타날 때까지 모든 마음을 공란으로 바꿔 놓습니다.

좀 더 이해하기 쉽게 (잘하면) 여기에 내 코드 중 일부가 있습니다. 그 중복 코드와 매우 우아하지를 많이 알고,하지만 난에 대해 나중에 걱정할 것 :

을 내 Playstate에서 업데이트 방법 :

private void updateObstacles(float dt) { 
    //nerd == player 
     if (obstacle.collides(nerd.getBounds())) { 
      switch (obstacle.getType()) { 
       ... 
       case ConstantsGame.WOMAN_TYPE: 
        alreadChanged = false; 
        Score.updateHeart(gameManager); 
       default: 
       ... 
      } 
     } 
    } 

그리고 내 점수 클래스 :

public static void updateHeart(GameStateManager manager) { 
      state = getStateOfHearts(); 
      if (state == 4) { 
      changeHeart(true, 0); 
      } else if (state == 3) { 
      manager.set(new GameOverState(manager)); 
      } else if (state == 2) { 
      changeHeart(true, 2); 
      } else if (state == 1) { 
      changeHeart(true, 1); 
      } else { 

      }  
    } 

    public static int getStateOfHearts() { 
     if ((!PlayState.alreadChanged && hearts.get(0) == heartEmpty) && (hearts.get(1) == heartFilled) && hearts.get(2) == heartFilled) { 

      state = 1; 
      PlayState.alreadChanged = true; 
      return state; 

     } else if (!PlayState.alreadChanged && hearts.get(1) == heartEmpty && hearts.get(2) == heartFilled && hearts.get(0) == heartEmpty) { 

      state = 2; 
      PlayState.alreadChanged = true; 
      return state; 
     } else if (!PlayState.alreadChanged &&hearts.get(2) == heartEmpty && hearts.get(0) == heartEmpty && hearts.get(1) == heartEmpty) { 

      state = 3; 
      PlayState.alreadChanged = true; 
      return state; 
     } else { 


      PlayState.alreadChanged = true; 
      return state; 
     } 


    } 

changeHeart 메서드는 하트를 빈 모양으로 변경하는 것 이상을 수행하지 않습니다. 난 그냥 이해가 안돼, 왜 완벽하게 디버깅하는 동안 잘 작동하지만 "실제".

는 장애물이 계산되었는지를 표시하는 부울이 당신 장애물 클래스에서 사전에 당신에게

Maximiliane

+0

장애물과 충돌 :

간단하게 당신이 충돌을 검사 할 때 다음 또한 장애물이 계산되어 있는지 확인

.... private boolean counted; .... public boolean isCounted(){ return counted; } public void setCounted(){ counted = true; } 

로 . 즉 모든 프레임 괴상한 사람이 충돌하면 그는 마음을 잃을 것입니다. 그래서 그가 4 개의 프레임에 대해 같은 장애물과 충돌한다면 그는 마음이 부족할 것입니다. – IronMonkey

+0

예, 상당히 합리적인 것 같습니다. 그 문제를 어떻게 극복 할 생각이 있습니까? 프레임에 관계없이 한 번만 변경된다는 것을 어떻게 확인할 수 있습니까? 나는 카운터와 함께 이미 아주 똑같은 문제를 가지고 있었다. – Maxikilliane

답변

0

을 너무 많이 주셔서 감사합니다. 나는 이것을 alreadChanged이 거짓마다 괴상한로 설정되어 읽으면서

private void updateObstacles(float dt) { 
//nerd == player 
    if (obstacle.collides(nerd.getBounds() && !obstacle.isCounted())) { //check if obstacle is counted 
     switch (obstacle.getType()) { 
      ... 
      case ConstantsGame.WOMAN_TYPE: 
       alreadChanged = false; 
       obstacle.setCounted(); //set obstacle as counted 
       Score.updateHeart(gameManager); 
      default: 
      ... 
     } 
     } 
    }  
+1

고마워, 너! – Maxikilliane

관련 문제