这个网站在创建我的游戏过程中已经帮了我很多,但现在我有点卡住了,所以我希望有人可以帮助我。
我目前正在尝试使用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
答案 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:
...
}
}
}