0

現在作成中のゲームで、開始画面を作成しました。その開始画面には、4 つJButtonの Play、Options、Credit、および Quit があります。Play を押すと、別の JButton、New Game が表示されます。

New Game ボタンを押したときに、開始画面が消えてゲームが開始されるようにしたくありません (実際のゲームと凝視画面の両方が拡張されますJComponent)。

ゲームを実行し、ゲーム内オプション メニューを処理する別のクラスがあります。

開始画面クラスにはbooleanstartGame という名前があり、そのブール値はデフォルトで false に等しく、[New Game] ボタンを押すと true に等しくなります。開始メニュー クラスには、startGame の値を返す public メソッドもあります。これは次のようになります。

public boolean checkGame(){
    return startGame;
}

ゲームを実行するメイン クラスでは、次のように Timer を使用して、checkGame メソッドが true または false に等しいかどうかを確認します。

if(menu.checkGame() == false){
            frame.add(menu);
        }
        Timer timer = new Timer(5, new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(menu.checkGame() == true){
                    frame.remove(menu);
                    frame.add(new Level1());
                }
            }
        });
        timer.start();

明らかに、これはうまくいきません。さて、私の質問ですが、どうすれば思いどおりに機能させることができますか?

4

1 に答える 1

0

2 番目のコード スニペットでは、Timerはそのタスクを 1 回だけ実行します。ScheduledExecutorServiceたとえば、次のように繰り返しチェックしたい場合があります。

    final ScheduledExecutorService scheduledExecutor =
            Executors.newSingleThreadScheduledExecutor();

    scheduledExecutor.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    if (menu.checkGame()) {
                        frame.remove(menu);
                        frame.add(new Level1());
                        scheduledExecutor.shutdown();
                    }
                }
            });
        }
    }, 5, 5, TimeUnit.MILLISECONDS);
于 2013-05-01T14:25:07.770 に答える