2017-03-25 19 views
-2

JLabelが0.5秒間スリープ状態になるようにしたいと思っていますが、ゲームの残りの部分はスリープ状態にはなりません。Java - 残りのゲームを一時停止しないでゲームの一部を一時停止する

誰かが私を助けてくれますか?

ここミサイルの撮影のためにCODE

shoot.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      frame.remove(missile); 
      frame.add(missile); 
      int x1 = 50; 
      missile.setBounds(c.manX + 150, c.manY + x1, 10, 20); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      x1 =+ 50; 
      missile.setBounds(c.manX + 150, c.manY + x1, 10, 20); 



     } 

    }); 

おかげで、

ジェイミー

+1

関連コードなしでは手伝いが難しくなります。私たちは、あなたのゲームループがどのように動作するかについてはまったく考えていません。私の推測は - スイングタイマーを使うのですが、どうですか?あなたが提供した情報があれば、言うことはできません。この質問をかなり改善することを検討してください。 –

+0

私は自分のコードを掲示することができます –

+0

私は笑った... –

答えて

1

あなたがたActionListener内からThread.sleepを呼び出している、そしてこのコードは常にスイングのイベントに呼ばれているので、これにより、イベントスレッド(したがってアプリケーション全体)がスリープして応答しなくなります。これをしないでください。代わりに、スイングタイマーを使用してアプリケーションを駆動し、コードを遅延させて繰り返し呼び出すことができます。

Swing Timer tutorial

また、削除して、GUIにミサイルを追加する必要はありません。代わりに場所を変更した後、単にそれを保持するコンテナにrepaint()を呼び出します。私自身は、JLabelを直接動かすのではなく、より簡単にスプライトを描くことができます。これは、paintPanelがオーバーライドされ、このメソッド内のすべてのゲームイメージを描画するJPanelです。

+0

良い方法はありませんか? –

+0

@JamieG:**これは**より良い方法です!その他のオプション - SwingWorkerの使用は、はるかに難しく危険な方法です –

関連する問題