Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Timer 動きがなぜ止まるのかわからない。

eclipse4.4でfillOvalで描画する円を利用したゲームを作ろうとしています。

今以下の3つのjavax.swing.Timerを作成しています。
カウントアップ用
10msごとにint変数に++して、その数値をJLabelに表示
ボール(円)作成用
1000msごとにrepaint()をし、ボールの座標・移動速度・色をそれぞれのjava.util.Arrayに追加
新規の座標は既存のボールとぶつからないところにするようにしています。
ボール移動用
10msごとにrepaint()をし、それぞれのボールの座標を移動させ、壁や互いのボールとの接触を調べて移動の向きを変えたり

実行させてみると、途中で止まってしまいます。
どれくらいで止まるかは毎回様々です。
空間は優に空いているときに止まったりするので、ボール作成のところで止まっているなんてことはないと思います。
そこで、原因を探るためにまずはボール同士の接触チェック辺りで無限ループにでもなっているのでは?とそのループの内と外のところに標準出力を使って動きを探ってみたところ、画面の動きが止まったときにコンソールの中身がすべて消えてしまいました。

デバッグをやってみようにもどうすればいいかがよくわからなくて。
試しに画面の動きが止まったときに一時停止させてみると、自分が書いた標準出力の深いところで止まっているようでした。

いったいなぜ止まってしまったのでしょうか?

3

回答

93971

閲覧

3件の回答

評価

0

>いったいなぜ止まってしまったのでしょうか?
文章で伝わると思わない方がいい。

>どうすればいいかがよくわからなくて
それはぐぐって確認する。

評価

0

単に言葉だけで「こんなことをしようとしてます」「何
がいけないのでしょうか」という説明をしても大抵は誰
にも有効なアドバイスはできないものです。

ご質問の内容では残念ながら具体的事実が足りなさすぎ
て考えられる範囲があまりに広くてコメントしずらいの
です。

コンソールの中身が消えなければデバッグを進められる
でしょうから、標準出力をコンソールだけでなくファイ
ルへ出力するようにしてデバッグを進めてみてくださ
い。eclipseであれば簡単にできます。「eclipse 標準
出力 ファイル」で検索してみてください。

評価

0

ウィンドウ→設定→実行/デバッグ→コンソールにあるコンソール出力の制限のチェックを外したらコンソールの内容は消えなくなりました。
でも画面の動きが止まった時のコンソールの挙動に少し疑問を抱いたため、コマンドプロンプトでコンパイルと実行をやり直してみました。
すると、画面の動きが止まった時に私が書いた標準出力の文字がだーっと出力されたため、その部分で無限ループになっているようです。
その原因については自分で考えてみます。
私の知識不足と調べ不足ですいませんでした。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。