2

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

最近开始了一个新的Game项目,有想过JFrame在Java中使用多个s。

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

1)主菜单(这是一个单例)

2) 战斗。

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

注意:我这样做的原因是 MainMenus EDT 可以在 Battle 中重复使用,JFrame因此只有 1 个 EDT 但有 2 个 JFrame。为了防止战斗框架处于活动状态(因为在同一 EDT 上被关闭后),我这样做setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

问题:

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

我想到了一个CardLayout,但是因为GamePanel每次用户按下 Start 时都必须创建一个新JButton实例,所以我无法启动单个实例并将其设置为卡

问的原因是我知道在 Java 中进行游戏编程时,你会做很多不被认为是好的做法的事情(比如设置位置和总体上不使用 LayoutManager)

为了帮助在Start Game 的 actionPerformed() 方法中的 MainMenu UI 中澄清,JButton我有:

 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
    }
    ...
}
4

1 回答 1

2

为了培养人们对怀疑的意愿,以及为了简单的多样性,游戏经常以新颖的方式推动用户界面设计。在实践中,多帧的吸引力可能不会超过风险。除了这里引用的众所周知的问题,我还要加上这里引用的噩梦。

如果CardLayout不合适,Buttons是一个简单地调用removeAll()in的示例resetGame()

于 2012-10-06T17:47:42.840 回答