ゲームをプログラミングしていますが、エラーが発生しました。
プレイヤーがオブジェクトと衝突した場合、player.hasCollided
true に設定されます。
if(playerBounds.intersects(wolfBounds)){
player.hasCollided = true;
player.dead();
}
ここで、hasCollided が true の場合、LoseScreen クラスの何かが画面に出力されます。
if(player.hasCollided){
lose.start(g);
}
player.dead() では、プレイヤーの速度が 0 に設定されます。
public void dead(){
playerSpeed = 0;
coinBank += coinsCollected;
}
問題は、私の InputHandler クラスで、失われた画面で選択肢が 1 で Enter キーが押されたときに、restartGame() が呼び出されるようにすることです。
public void restartGame(){
obstacleWolf.getNewPosition();
obstacleHole.getNewPosition();
hasLost = false;
player.hasCollided = false;
player.playerSpeed = 5;
player.nextX = 1000;
player.coinsCollected = 0;
player.xElapsed = 0;
}
if(lose.choice == 1 && enter){
game.hasLost = false;
game.restartGame();
System.out.println(player.hasCollided + " " + player.playerSpeed);
}
これらの変数は、意図したとおりに設定されています (たとえば、playerSpeed は 0 から 5 になり、hasCollided は true から false になります) が、効果は発生していません。だから、前に示したように、lose.start(g); hasCollided が true の場合にのみ呼び出されることを意図していますが、false になった場合でも画面に出力されます。
関連する変数/メソッドの使用方法は次のとおりです。
public void move() {
x = x - player.playerSpeed;
}
(すべての移動オブジェクトは同じ移動方法を共有します)
ゲーム クラスの一部:
public void tick(){
input.tick();
if(gameState){
player.tick();
player.move();
collision();
treeline.move();
obstacleHole.move();
obstacleWolf.move();
coin.move();
coin.tick();
}
この質問をもっと明確にできるかどうかわかりません。必要に応じて、さまざまなクラスからさらに多くのコードを提供できます。