0

ゲームをプログラミングしていますが、エラーが発生しました。

プレイヤーがオブジェクトと衝突した場合、player.hasCollidedtrue に設定されます。

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();
}

この質問をもっと明確にできるかどうかわかりません。必要に応じて、さまざまなクラスからさらに多くのコードを提供できます。

4

1 に答える 1