Java 游戏场景的多个JFrame
如果标题有点不正确,我很抱歉 我最近开始了一个新的游戏项目,并考虑在Java中使用多个Java 游戏场景的多个JFrame,java,swing,jframe,Java,Swing,Jframe,如果标题有点不正确,我很抱歉 我最近开始了一个新的游戏项目,并考虑在Java中使用多个JFrames 原因是我的游戏有2个JFrames: 1) 主菜单(单件菜单) 2) 战斗 现在,主菜单JFrame将在自己的EDT上初始化战斗JFrame,然后通过setVisible(false)隐藏自己,当游戏结束时setVisible(true)可以从主菜单框架单例上的战斗框架调用 注意:我这样做的原因是,主菜单EDT可以在战斗JFrame中重用,因此只有1个EDT,但有2个JFrame。为了防止战斗帧
JFrame
s
原因是我的游戏有2个JFrame
s:
1) 主菜单(单件菜单)
2) 战斗
现在,主菜单JFrame
将在自己的EDT上初始化战斗JFrame
,然后通过setVisible(false)
隐藏自己,当游戏结束时setVisible(true)
可以从主菜单框架单例上的战斗框架调用
注意:我这样做的原因是,主菜单EDT可以在战斗JFrame
中重用,因此只有1个EDT,但有2个JFrame。为了防止战斗帧处于活动状态(由于在同一EDT上而关闭后),我执行setDefaultCloseOperation(JFrame.DISPOSE_on_CLOSE)代码>
问题:
这是允许的还是有更好的方法
我想到了一个CardLayout
,但由于每次用户按下StartJButton
时都必须创建一个新的GamePanel
,因此我无法启动单个实例并将其设置为卡
原因是我知道在java中做游戏编程时,你做了很多事情,没有考虑好的练习(比如设置位置,而不是使用LayOutMaultor)< /P>
为了帮助在我的主菜单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() {
...
}
}
当游戏在战斗JFrame中结束时:
class BattleField extends JFrame {
...
private void gameOver() {
MainMenu.getInstance().setVisible(true);
dispose();//dipsose of Battle JFrame
}
...
}
为了培养用户的意愿,以及简单的多样性,游戏经常以新颖的方式推动用户界面设计。在实践中,多帧的吸引力可能不会超过风险。除了举出的众所周知的问题外,我还要补充举出的噩梦
如果CardLayout
不合适,那么在resetGame()
中调用removeAll()
就是一个例子,请参见@andrewhompson谢谢,但正如我所说的,我知道这不是一个好的做法,但在创建游戏时,我们经常需要模糊这些好的和坏的做法来实现我们所需要的。正如在问题中所说,我不能使用卡片布局,并且我说明了为什么“自己的EDT”会影响你?只有一个EDT可以从中提取所有组件painted@david所以不要。简单地“删除”菜单窗格并“添加”您的游戏窗格,或者在游戏屏幕上使用控制器窗格并根据需要添加每个新实例?@DavidKroukamp:是一个简单地调用removeAll()
中的removeAll()
+1谢谢您的问题解决了,实际上选择了后者(removeAll()
)因为我可以动态地(每次创建一个新面板)完成这项工作,谢谢!!