我正在开发一款Java Snake游戏。大部分的基本功能已经完成了,我正在尝试添加一个重启功能,当游戏结束时,当你按回车键时,将触发重启功能。所有的逻辑都正常工作,蛇重置到起始位置,苹果获得新的随机位置等等。但是出于某种原因,我的JPanels不会重新绘制。你们能帮我看看我做错了什么吗?
我已经制作了我的游戏循环,重置功能等代码的快照。如果你需要更多,请让我知道。
/*
* Main class, game loop, keyListener etc
*/
/*
* Here is my run method with game loop when gameOver, snake will no longer
* update.
*
*/
@Override
public void run() {
// game loop
while (running) {
if (!gameOver) {
update();
}
MainFrame.paint();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*
* KeyListener, when ENTER is pressed call resetGame() method.
*/
if(key.getKeyCode()==KeyEvent.VK_ENTER && gameOver) {
resetGame();
}
/*
* resetGame method where I reset variables, create new default snake,
* clear JPanels etc.
*/
public void resetGame() {
score = 0;
snake.clear(); // clear arraylist
// .removAll() on both JPanels
MainFrame.clear();
// fields
gameOver = false;
newGame = true;
direction = Direction.RIGHT;
// create default snake
snake = new ArrayList<Point>();
size = 5;
for (int i = 0; i < size; i++) {
snake.add(new Point((size - i - 1) * MainFrame.getTileSize(), 0));
}
System.out.println(snake);
// create apple and set to random location
apple = randomApple();
}
/*
* MainFrame extends JFrame
* methods for repainting and clearing JPanels
*/
public static void paint() {
gamePanel.repaint();
sideHud.repaint();
}
public static void clear() {
gamePanel.removeAll();
sideHud.removeAll();
paint();
}
我的JPanels是非常基础的。我只是用Graphics2D对象在paintComponent方法中绘制了所有内容。
这是我最新的解决方案(不起作用)。我也试过了,离开游戏循环,然后在resetGame()方法中再次调用run(),我尝试在按ENTER时创建一个新的主对象,但都没有成功。
提前谢谢。
发布于 2018-03-01 20:26:20
首先,通过if so创建一个在游戏结束时设置为true的布尔值来检查游戏是否结束。当该布尔值为true时,创建一个名为的方法,该方法重置游戏方法中的所有变量以及与游戏相关的任何其他变量。然后调用游戏方法(任何触发游戏工作的方法)。瞧,你的游戏重置了希望,这是有帮助的。
https://stackoverflow.com/questions/48990910
复制相似问题