Этот Java-метод пропускает инструкцию return. Мне было интересно, кто-нибудь столкнулся с этим и узнал о решении. Какая бы ошибка ни была очень тонкой.Java-метод пропускает оператор возврата
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());
}
Вот скриншот с выходом консоли, чтобы доказать это:
Кроме того, эта ошибка только начал происходит, когда я кладу gamestates в структуре стека. Вот код, я сейчас, используя для перехода GameState:
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>();
Надеюсь, кто-то имеет некоторое представление. Спасибо!
Если ваше «доказательство» заключается в том, что он регистрирует «контрольную точку 2» после «контрольной точки 1», это, очевидно, еще один вызов. Попробуйте отладить код. – shmosel
Вы дважды вызываете 'getNextGameState' ... – assylias
Кроме того, PlayField и GameOver расширяют GameState – DayTripperID