質問: 471;//zikiのY座標を471に設定 } ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 zikizahyou.setText("自機 "+"X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 } public void mouseDragged(MouseEvent e){ } } ``` ### 試したこと ・パネルにzikidamaを追加して消したあともう一回zikidama追加したい↓ とくに何もしていない ・zikidamaの座標設定をzikiの左にしっかり設定したい↓ 座標設定をzikiにしてみた ### 追記 **弾の発射処理について** まずAを押したらキーイベントで押したことを判定して panelにzikidamaを追加 そのあとtimerをスタートさせて 画面の端に来たらtimerをストップさせ zikidamaをpanelから削除して そのあとpanelをrepaintしています **タイマーハンドラーについて** タイムハンドラーではzikidamaXが0になるまで zikidamaX-15をしてそのあと座標を再設定 そしてzikidamaの座標の表示の更新をしています そしてzikidamaXが0になったらtimerをストップして zikidamaをpanelから消して そのあとpanelをrepaintしています **弾の座標にどんな値が指定されているかについて** 弾の座標にはzikiの X座標-30 Y座標±0 が設定されています またそれはzikiの座標をまず X=750 Y=225 に設定していて その座標の X-30 Y±0 をzikidamaのX,Yというように設定しているから こんな感じですかね
回答: > > 消すまではできたがもう一回zikidamaを追加できない > > zikiを移動させても初期値の場所からしか発射されない > > > いずれも原因は同じです。弾を発射するときに今回発射する弾の位置をフィールドへ設定しないままアニメーションを開始してしまってます。連続処理(今回ならアニメーション)を開始する際に、必要な情報が適切に初期化できているか、よく考えるようにしましょう。 ちなみに画面上に弾の座標をデバッグ表示するよう工夫していますよね?せっかくそうしているのですから2回目の弾を発射する際に「ありゃ?X座標が最初から0のままだぞ・・・」というぐあいに気づけるとよかったのですが・・・ 追記: > > 弾の座標にはzikiの X座標-30 Y座標±0 が設定されています > > またそれはzikiの座標をまず X=750 Y=225 に設定していて > > その座標の X-30 Y±0 をzikidamaのX,Yというように設定しているから > > > 「720, 225が設定される」と書けばGOODだったのですが、「zikiの X座標-30 Y座標±0」と説明しておられることから、「アプリケーション開始後にzikiの座標が変化しても、zikiの座標の変化に追従して弾の初期値も変化してくれるかのように思い込んだ」ということのように思います。実際はそうでなく、あくまで720, 225が弾の座標初期値**(あくまで1発目を発射する場合の初期値)**になります。この点が > > zikiを移動させても初期値の場所からしか発射されない > > > という疑問が解消しなかった原因では? また1発目を発射しそれが画面左端に到達した後、弾の座標(を保持しているフィールドの値)は最後の位置(X<=0つまり画面左端)のままです。そのままで2発目を発射すればどうなるかは自明と思います。(質問者さんにとって自明でないなら、2発目発射の際に座標がどうなるかを述べてみてください)