Java 正在重置变量,但未发生影响

Java 正在重置变量,但未发生影响,java,Java,我正在编写一个游戏,但我遇到了一个错误 当播放机与对象碰撞时,player.hascolled设置为true if(playerBounds.intersects(wolfBounds)){ player.hasCollided = true; player.dead(); } 现在,当HasCollide为true时,LoseScreen类中的某些内容将打印到屏幕上: if(player.hasCollided){ lose.start(g

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

当播放机与对象碰撞时,player.hascolled设置为true

if(playerBounds.intersects(wolfBounds)){
        player.hasCollided = true;  
        player.dead();
}
现在,当HasCollide为true时,LoseScreen类中的某些内容将打印到屏幕上:

if(player.hasCollided){
        lose.start(g);
}
在player.dead中,玩家的速度设置为0

public void dead(){
    playerSpeed = 0;
    coinBank += coinsCollected;
}
问题是,在我的InPurtHandler类中,我这样做是为了在lose屏幕上,当选择为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;
}
这些变量正被设置为它们应该设置的值,例如playerSpeed从0变为5,HasCollide从true变为false,但效果没有发生。所以,就像我之前展示的那样,lose.startg;仅当HasCollide为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();
}

我不确定我是否能把这个问题说得更清楚。如果需要,我可以从不同的类中提供更多的代码。

这个问题目前的形式无法回答,请参见上面的2条注释。 原因是当前的代码结构

你需要重构代码,然后你就会发现问题所在。 将所有对玩家字段的修改放在玩家类的方法中。 仅通过方法访问字段。将田地私有化是一种古老的好做法。 那么您需要共享的唯一代码就是这个Player类


在单线程环境中,仅此而已。

要更快地获得更好的帮助,请发布一个。我认为您需要一个较小的问题—完整地描述这个问题需要付出更多的努力。有太多的事情会影响正在发生的事情,而你却没有展示出来,事实上,在合理的空间和时间内展示会有困难。试着调试你的代码,直到你有一个较小的问题-为什么一个方法没有被激发,为什么一个变量集在一个地方似乎没有正确的值,在另一个地方,诸如此类。我第三个建议是努力提供更少更相关的代码。更多地使用调试器,尤其是设置字段断点的功能,当值更改时,这些断点将消息打印到控制台。这将让你看到标志是否在某个地方被重置,或者它是否被设置在一个与你读取它的对象完全不同的对象上。-1:你需要开始修复你的代码,那么你的代码将被修复不是答案。重构代码充其量也是间接有用的,因为您最终会盯着它看足够长的时间,可能会发现问题。通过调试和隔离问题进行系统诊断会更好。我不同意。目前连看播放器相关的代码都已经是问题了。正如Andrew Thomson提到的,使用SSCCE术语很好,如果不保留所有代码,那么当前形式的问题就不能不加注意。虽然只有player.hascolled意味着相关代码应该只在player中,否则这是糟糕的设计。我同意这个问题是无法回答的。这就是为什么你不应该回答,而是要求澄清/标记问题/某事。糟糕的问题不能成为糟糕答案的借口。虽然我们看到的OP代码中的过度耦合不是很好,但它不是OP问题的直接原因。正是因为显示的代码和提供的信息不包含问题的原因。即使它可能最终导致它,但即使这样,你的建议也可能是白费力气,因为它更多的是关于你的设计敏感性。
public void tick(){
    input.tick();

    if(gameState){
        player.tick();
        player.move();
        collision();
        treeline.move();
        obstacleHole.move();
        obstacleWolf.move();
        coin.move();
        coin.tick();
}