タイトルの表現が少し間違っていたらすみません。
JFrame
私は最近、新しい Game プロジェクトを開始し、Javaで複数の を使用することを考えました。
その理由は、私のゲームには 2 つJFrame
の s があるからです。
1) メインメニュー (シングルトン)
2) バトル。
これで、MainMenuは独自の EDT でJFrame
Battle を初期化し、それを介して非表示になり、ゲームが終了すると、MainMenu フレーム シングルトンの Battle フレームから呼び出すことができます。JFrame
setVisible(false)
setVisible(true)
注意: これを行った理由は、MainMenus EDT を Battle に再利用できるようにするためでしたJFrame
。したがって、EDT は 1 つしかなく、JFrame は 2 つです。バトルフレームがアクティブになるのを防ぐために(同じEDTで閉じられた後)、私はそうしますsetDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
質問:
これは許可されていますか、それともより良い方法がありますか?
を考えましたが、ユーザーが [開始] を押すたびにCardLayout
新しいインスタンスを作成する必要があるため、単一のインスタンスを開始してそれをカードとして設定することはできませんGamePanel
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
}
...
}