我正在编写游戏,但我遇到了错误。
当玩家与某个对象发生碰撞时,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();
}
我不确定我是否可以让这个问题更清晰。如果需要,我可以提供来自不同类的更多代码。
答案 0 :(得分:-2)
目前的形式无法回答这个问题(见上文2条评论) 原因是当前的代码结构。
你需要重构代码,然后你会发现问题 将所有播放器字段的修改放在Player类的方法中 仅通过方法访问字段。将领域变为私人是一种古老的良好做法 那么你需要分享的唯一代码就是这个Player类。
在一个线程环境中,就是这样。