【发布时间】:2017-01-30 18:27:12
【问题描述】:
这个网站已经在我创建游戏的过程中帮助了我很多,但现在我有点卡住了,所以我希望有人能帮助我。
我目前正在尝试使用 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 方法只是将相应的心形更改为空形状。 我只是不明白,为什么它在调试时工作得很好,但在“现实生活”中却不行。
非常感谢您,
马克西米利安
【问题讨论】:
-
当我读到这篇文章时,每次书呆子与障碍物碰撞时,alreadChanged 都会设置为 false。这意味着每一个框架书呆子碰撞他都会失去信心。因此,如果他在 4 帧内与相同的障碍物相撞,他就会心无旁骛。
-
是的,这听起来很合理。你知道如何克服这个问题吗?我如何确保它只更改一次 - 无论帧数如何?我已经在柜台上遇到了同样的问题..
标签: java android-studio libgdx