变量正在重置,但效果没有发生

时间:2013-07-27 13:34:25

标签: java

我正在编写游戏,但我遇到了错误。

当玩家与某个对象发生碰撞时,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)但效果未发生。所以,就像我之前展示的那样,lost.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();
}

我不确定我是否可以让这个问题更清晰。如果需要,我可以提供来自不同类的更多代码。

1 个答案:

答案 0 :(得分:-2)

目前的形式无法回答这个问题(见上文2条评论) 原因是当前的代码结构。

你需要重构代码,然后你会发现问题 将所有播放器字段的修改放在Player类的方法中 仅通过方法访问字段。将领域变为私人是一种古老的良好做法 那么你需要分享的唯一代码就是这个Player类。

在一个线程环境中,就是这样。