首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重置游戏循环/重启游戏java swing

重置游戏循环/重启游戏java swing
EN

Stack Overflow用户
提问于 2018-02-26 22:36:04
回答 1查看 1.5K关注 0票数 1

我正在开发一款Java Snake游戏。大部分的基本功能已经完成了,我正在尝试添加一个重启功能,当游戏结束时,当你按回车键时,将触发重启功能。所有的逻辑都正常工作,蛇重置到起始位置,苹果获得新的随机位置等等。但是出于某种原因,我的JPanels不会重新绘制。你们能帮我看看我做错了什么吗?

我已经制作了我的游戏循环,重置功能等代码的快照。如果你需要更多,请让我知道。

代码语言:javascript
运行
复制
/*
     * 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时创建一个新的主对象,但都没有成功。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-03-01 20:26:20

首先,通过if so创建一个在游戏结束时设置为true的布尔值来检查游戏是否结束。当该布尔值为true时,创建一个名为的方法,该方法重置游戏方法中的所有变量以及与游戏相关的任何其他变量。然后调用游戏方法(任何触发游戏工作的方法)。瞧,你的游戏重置了希望,这是有帮助的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48990910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档