このJavaメソッドはreturn文をスキップしています。誰かがこれに遭遇したかどうかと、解決策を知りたいと思っていました。バグが何であれ、それは非常に微妙です。ここで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());
}
それを証明するために、コンソール出力とスクリーンショットです:また
、このバグは、私だけがスタック構造で私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>();
うまくいけば、誰かがいくつかの洞察力を持っています。ありがとうございました!
"証明書"が "チェックポイント1"の後に "チェックポイント2"を記録している場合、それは明らかに別の呼び出しです。コードをデバッグしてみてください。 – shmosel
あなたは 'getNextGameState'を2回呼びます... – assylias
また、PlayFieldとGameOverはどちらもGameStateを延長します – DayTripperID