如果标题措辞有点不正确,我很抱歉。
最近开始了一个新的Game项目,有想过JFrame
在Java中使用多个s。
原因是我的游戏有 2JFrame
秒:
1)主菜单(这是一个单例)
2) 战斗。
现在 MainMenu将在自己的 EDT 上JFrame
初始化 Battle ,然后通过 隐藏自己,当游戏结束时,可以从 MainMenu 框架单例上的 Battle 框架调用。JFrame
setVisible(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
}
...
}