質問: new Timer(10, event ->{//timerを設定 zikidamaX[0] -= 1;//zikidamaX[0]の座標を-1する zikidama.setLocation(zikidamaX[0], zikidamaY[0]); if(zikidamaX[0] <= 0){ } }); } } ```
回答: 3点コメントします。 * 利用するクラス 以前の質問にコメントしましたが、swingのアプリケーションではjavax.swing.Timerをお勧めします。java.util.Timerやjava.util.TimerTaskでもできなくはないですが、これらを使うと定期処理(runメソッド)はEDT(Event Dispatch Thread)とは異なるスレッドで実行されてしまいます。swing/awtコンポーネントへのアクセスをEDT(Event Dispatch Thread)以外から行うのは禁止事項なので、もしTimerTaskなどを使うならSwingUtilities.invokeLaterを使わないといけないことになり面倒です。その点javax.swing.Timerだと定期処理がEDTで実行されることが保証されます。そういう理由でjavax.swing.Timerの方がお勧めなのです。 * 定期処理は常に一つだけ動かしておく方が多分簡単では? これも以前の質問にコメントしたのですが、弾を発射する度にTimerのインスタンスを生成するなんてことをすると(そうしてもいいのですが・・・)Timerが必要なくなったときにストップして後始末するようにしないと、おそらくアプリケーションの処理がどんどん重くなります。こうした点が配慮できるまではアプリケーション開始時に唯一のタイマーを動かしっぱなしにしてそこで全ての定期処理をする方がプログラムコードがシンプルになると思います。 * 時間間隔 本件の問題には直接関係ないと思いますが、アニメーション目的で1ミリ秒ごとに画面更新をするのは高頻度すぎる気がします。例えばTV放送でも1秒にせいぜい30フレームですし。頻度を高めにするとしてもせいぜい10ミリ秒間隔ぐらいでいいんじゃないでしょうか?