游戏场景的多个JFrame

时间:2012-10-06 07:13:26

标签: java swing jframe

如果标题措辞有点不对,我很抱歉。

我最近开始了一个新的Game项目,并考虑过在Java中使用多个JFrame

原因是我的游戏有2 JFrame s:

1)主菜单(单身)

2)战斗。

现在MainMenu JFrame将在其自己的EDT上初始化战斗JFrame,然后通过setVisible(false)隐藏自己,当游戏结束时setVisible(true)可以从MainMenu框架单兵上的战斗框架。

注意:我这样做的原因是MainMenus EDT可以重新用于Battle JFrame,因此只有1个EDT而是2个JFrame。为了防止战斗帧被激活(因为在相同的EDT上关闭之后),我做setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

问题:

这是允许的还是有更好的方法?

我想到的是CardLayout,但是因为每次用户按下“开始GamePanel时都必须创建新的JButton”我无法启动单个实例并将其设置为卡< / p>

询问的原因是我知道在使用Java进行游戏编程时你会做很多不考虑好习惯的事情(比如设置位置和整体不使用LayoutManager)

为了帮助在我的MainMenu UI中澄清开始游戏 JButton的actionPerformed()方法,我有:

 class MainMenu extends JFrame implements ActionListener {
        ...
            public void actionPerformed(..){
            NarutoGame narutoGame = null;
                narutoGame = new NarutoGame(...);

            narutoGame.setVisible(true);//running in MainMenu EDT
            //set this panels containing frame (MainMenu) to not visible
            }
        ...
   MainMenu getInstance() {
        ...
   }
 }

当Battle JFrame游戏结束时:

class BattleField extends JFrame  {
    ...
    private void gameOver() {
        MainMenu.getInstance().setVisible(true);
        dispose();//dipsose of Battle JFrame
    }
    ...
}

1 个答案:

答案 0 :(得分:2)

为了培养自愿的suspension of disbelief,以及简单的多样性,游戏经常以新颖的方式推动用户界面设计。在实践中,多个框架的吸引力可能超过风险。除了引用的众所周知的问题here之外,我还要加上引用的噩梦here

如果CardLayout不合适,Buttons就是一个仅在removeAll()中调用resetGame()的示例。