- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:自作でjavaAppletでゲームを作ろうとしています。)
自作でjavaAppletでゲームを作ろうとしています
このQ&Aのポイント
- 自作でjavaAppletでゲームを作る際の円の移動プログラムで、クリックやドラッグした先に円を移動させる際に速度が変わる問題に対して助言をいただきたい。
- 現在、自作でjavaAppletでゲームを作ろうとしています。円の位置をマウスクリックやドラッグで変更するプログラムを作成しているのですが、円の移動速度が意図しない速さで変化してしまいます。
- javaAppletでゲームを作ろうとしています。円の移動速度が意図しない速さで変化してしまう問題について、解決策を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 スレッドが二重に起動されていますよ。 while (go) { try { Thread.sleep(10); } catch (Exception ex) { } moveTime(); } スレッドは、go が true の限り回り続けますが、気をつけなければいけないことは、while ステートメントのところで評価されると言うことです。 while ステートメントで評価する時間はほんの一瞬であり、このスレッドが過ごす時間の99.99%は、Thread.sleep(10);で、何もしていない状態です。 マウスイベントでは、stop()メソッドで、go に false を設定していますが、この時もまず間違いなく、スレッドは Thread.sleep(10); で待機状態でしょう。 すぐさま、マウスイベントでは、start() メソッド内で、新たなスレッドを起動し、go を true に戻してしまっています。 これで、最初のスレッドは、終了する時機を逸してしまい二つのスレッドが同時に走るという事態になってしまいます。 そして、二つのスレッドが先を争うように円を動かすものだから、速度が倍になってしまいます。 マウスドラッグイベントはさらにひどい状態です。 ものすごい量のスレッドが多重起動されています。 円が瞬間移動しているように見えるのは、超速で移動しているだけです。 スレッドが多重起動しないように工夫してみましょう。
お礼
そんなとこに原因があったとは気づきませんでした。 言われてみればその通りですね。 なんとか多重起動しないようにできました。 ちょっと時間なかったんであせっていたのですばやい回答本当にありがとうございました。