libgdx游戏在调试时工作但在仿真器上没有

时间:2016-09-22 09:00:17

标签: java android-studio libgdx

这个网站在创建我的游戏过程中已经帮了我很多,但现在我有点卡住了,所以我希望有人可以帮助我。

我目前正在尝试使用libgdx在Android工作室中创建一个游戏。这是一个非常简单的跳跃和运行游戏与坑和障碍。用户有三个生命,呈现为三个心形纹理。 当玩家与其中一个障碍物碰撞时,其中一个心脏应该从填充变为空。 问题是:它在调试时工作得很好,但是当我在我的Android平板电脑上运行它时却没有。它不会只改变一个空心脏,而是继续将所有心脏变为空,直到我的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

1 个答案:

答案 0 :(得分:0)

在障碍物类上有一个布尔值来标记障碍物是否已被计算。

就像

一样简单
....
private boolean counted;
....
public boolean isCounted(){
    return counted;
}

public void setCounted(){
    counted = true;
}

然后当您检查碰撞时,还要检查是否计算了障碍物:

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:
           ...
         }
      }
   }