重启2D游戏

时间:2014-01-25 19:34:42

标签: screen 2d-games

当用户按下“新游戏”按钮时,我无法重启2D游戏。

我的游戏结构:

游戏有几个“屏幕”:打开屏幕,说明屏幕,主游戏屏幕和游戏结束屏幕。

每个屏幕都是一个类的实例:OpeningScreen类,GameScreen类等。

有一个名为Main的班级。这门课有三个角色。

  • 这是该程序的JFrame(窗口)。
  • 它有主要方法 - 第一个要运行的类。
  • 它有一个改变屏幕的方法。

程序启动时,此类运行。第一次运行时:

  1. 创建一个自己的新实例(它是一个JFrame类型的类)。
  2. 创建每个“屏幕类”的实例。每个'screen-class'的构造函数将Main的实例作为参数:( aka:GameOverScreen gameOverScreen = new GameOver(this))。
  3. 创建一个名为mainPanel的新JPanel,并将其添加到JFrame。任何要显示的屏幕都将包含在此JPanel中(屏幕也是JPanel类型)。
  4. changeScreen()方法的工作原理:

    changeScreen()的签名是:changeScreen(JPanel from, JPanel to)

    每当需要更改屏幕时,显示的当前屏幕将调用此方法,如下所示:main.changeScreen(this, main.InstructionsScreen)。它会从mainPanel中移除上一个屏幕,并将新屏幕添加到mainPanel。如上所述,这些屏幕是在程序启动时创建的。

    这是更改屏幕的方法:

    public void changeScreen(JPanel from, JPanel to){
    
        mainPanel.remove(from);
        mainPanel.add(to);
    
        mainPanel.revalidate();
        mainPanel.repaint();
    
    }
    

    我的问题:

    游戏结束后,Game类会调用changeScreen方法:main.changeScreen(this, main.GameOverScreen)

    这会将游戏屏幕替换为屏幕上的游戏。 在游戏结束屏幕中按“新游戏”按钮,会调用main.changeScreen(this, main.GameScreen)

    问题:按下游戏结束屏幕中的“新游戏”按钮,确实再次显示Game类的实例。但这是旧实例,因此游戏不会重新启动。它已经完成了。

    我尝试在changeScreen()中执行以下更改:

    public void changeScreen(JPanel from, JPanel to){
    
        mainPanel.remove(from);
    
        if(to.equals(gameScreen)){
            gameScreen = null;
            gameScreen = new GameScreen(this);
        }
        mainPanel.add(gameScreen);
    
        mainPanel.revalidate();
        mainPanel.repaint();
    
    }
    

    这应该重置gameScreen对象。 但是当按下“新游戏”按钮时,这会产生大约10秒的延迟。

    重启游戏的好方法是什么?

    谢谢

1 个答案:

答案 0 :(得分:0)

您必须删除子/实例。猜测这是Actionscript 3你应该做removeChild然后让子null。试试吧。