用于游戏场景的多个JFrames
如果标题的表述有误,我很抱歉。用于游戏场景的多个JFrames
我最近开始了一个新的游戏项目,并考虑过在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
要创建我不能启动一个实例,并设置为卡
之所以问的是我知道什么时候做游戏编程在Java中你做了很多的事情没有考虑好的做法(比如设置位置和整体没有使用布局管理)
为了帮助我的MainMenu UI澄清开始的actionPerformed()方法中游戏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() {
...
}
}
当游戏结束了在战斗的JFrame:
class BattleField extends JFrame {
...
private void gameOver() {
MainMenu.getInstance().setVisible(true);
dispose();//dipsose of Battle JFrame
}
...
}
为了促进愿意suspension of disbelief,以及简单的品种,游戏常常推用户界面设计以新颖的方式。实际上,多个框架的吸引力可能不是而不是大于风险。除了引用的众所周知的问题here之外,我还会加上梦魇here。
如果CardLayout
不合适,Buttons
是一个简单调用resetGame()
中的removeAll()
的示例。
+1谢谢你的问题解决,实际上选择后者('removeAll()'),我可以动态地做到这一点(每次创建一个新的面板)谢谢你! –
请参阅[使用多个JFrames,好/坏实践?](http://*.com/a/9554657/418556) –
@AndrewThompson谢谢,但正如我所说,我知道它不是好的做法,但当创建游戏时,我们经常需要模糊这些好的和不好的做法以实现我们所需要的。正如在问题中所说的我不能使用CardLayout,并且我陈述了为什么 –
“自己的EDT”是什么?只有一个EDT可用于绘制所有组件 – MadProgrammer