这个java方法正在跳过return语句。我想知道是否有人遇到过此问题并知道解决方案。无论错误是什么,它都非常微妙。
public GameState getNextGameState() {
if (player.getLives() > 0) {
if (!player.isAlive()) {
System.out.println("checkpoint 1");
player.setIsAlive(true);
return new PlayField(width, height, hiScores, player.setCoordinates(width / 2, height - 8),
stagePattern, stage);
}
System.out.println("checkpoint 2");
if(++stage > 29)
stage = 0;
return new PlayField(width, height, hiScores, player.setCoordinates(width / 2, height - 8), stage);
}
return new GameOver(Game.key, hiScores, player.getRank());
}
此外,当我将游戏状态放在堆栈结构中时,这个错误才开始发生。这是我现在用于游戏状态转换的代码:
public void update() {
gsm.peek().update();
if(gsm.peek().finished)
if(gsm.peek().getNextGameState() == null)
gsm.pop();
else
gsm.push(gsm.pop().getNextGameState());
}
gsm声明是:
public static Stack<GameState> gsm = new Stack<GameState>();
希望有人有一些见解。谢谢!
答案 0 :(得分:1)
这不是同一个电话的结果
你在这里打电话两次。
第一次没有活着,第二次活着。所以你在输出中都有这两个消息
在游戏中,更新阶段以连续方式调用
只需在方法开头添加System.out.println
(即条件之前),即可获得确认:
public GameState getNextGameState() {
System.out.println("enter method");
...
}
答案 1 :(得分:1)
你可以发布更多代码吗?您可能正在调用它两次并且它不会跳过返回。如果你真的认为它是一个突破点,可以帮助你调试和观察代码运行。