2

タイトルの表現が少し間違っていたらすみません。

JFrame私は最近、新しい Game プロジェクトを開始し、Javaで複数の を使用することを考えました。

その理由は、私のゲームには 2 つJFrameの s があるからです。

1) メインメニュー (シングルトン)

2) バトル。

これで、MainMenuは独自の EDT でJFrameBattle を初期化し、それを介して非表示になり、ゲームが終了すると、MainMenu フレーム シングルトンの Battle フレームから呼び出すことができます。JFramesetVisible(false)setVisible(true)

注意: これを行った理由は、MainMenus EDT を Battle に再利用できるようにするためでしたJFrame。したがって、EDT は 1 つしかなく、JFrame は 2 つです。バトルフレームがアクティブになるのを防ぐために(同じEDTで閉じられた後)、私はそうしますsetDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

質問:

これは許可されていますか、それともより良い方法がありますか?

を考えましたが、ユーザーが [開始] を押すたびにCardLayout新しいインスタンスを作成する必要があるため、単一のインスタンスを開始してそれをカードとして設定することはできませんGamePanelJButton

質問する理由は、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、単純に in を呼び出す例removeAll()ですresetGame()

于 2012-10-06T17:47:42.840 に答える