我正在编写游戏,但我遇到了错误。
当玩家与物体碰撞时,player.hasCollided
设置为true。
if(playerBounds.intersects(wolfBounds)){
player.hasCollided = true;
player.dead();
}
现在,当 hasCollided 为真时,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();
}
我不确定我是否可以使这个问题更清楚。如果需要,我可以提供来自不同类的更多代码。