人々はあなたの質問に非常に低いレベルで答えています。問題をより高いレベルで考えることが役立つ場合があります。
必要なのは、一種の状態管理です。これを意味するコンピューター サイエンス用語は、Finite State Machine です。しかし、今はわざわざ調べないでください。最初はかなり乾燥していて混乱します:)
あなたのキャラクターは現在、「立っている」という 1 つの状態を持っています。「目的地まで歩いている」状態を追加して処理する必要があります。
他のマウス入力について読んだことから、ある種のループが必要になると思います
ゲーム ループと呼ばれる 1 つのループが必要です。XNA を使用している場合は、既に XNA を取得しています。しかし、あなたは正しい軌道に乗っています。
ゲーム ループを通過するたびに、現在の状態を処理し、状態遷移と呼ばれるものを確認する必要があります。それは、世界の何かをある状態から別の状態に変えるときです。たとえば、マウスをクリックすると、男が動き始めます。
ゲーム ループで、マウス クリックが発生したかどうかを確認します。もしそうなら、いくつかのデータ(どこに移動するか)を設定し、状態を「目的地まで歩く」に設定して歩き始めるように彼に伝えます。次の更新では、代わりにその状態を処理します。
キャラクターが「desintation への歩行」状態にある場合、最後のゲーム アップデートからの経過時間に基づいて位置を更新する必要があります。XNA では、これは自動的に計算されます。XNA を使用していない場合は、自分で確認する必要があります。Stopwatch
クラスのようなものを使用して、Elapsed
フィールドを確認できる場合があります。
キャラクターが目的地にいる場合は、「立っている」状態に戻す必要があります。
別のマウス クリックを受け取った場合、「目的地まで歩いている」状態に注意を払うかどうかはあなた次第です。注意すれば、「立ち回り」状態から遷移したときと同じようなデータを設定することになります。
したがって、次の変数が必要になります。
- 最後のゲーム ループからの経過時間を調べるためのタイマー (XNA が提供します)
- 現在のプレーヤーの状態 (おそらく
enum
)
- 現在のプレーヤーの位置 (ベクトル)
- プレーヤーの歩行速度 (おそらくフロート)、単位/秒 (またはミリ秒) で測定
- 「目的地まで歩いている」状態のデータ - 目標位置 (別のベクトル)
- ユーザー入力に関連するデータ (前回の更新以降に発生したマウス イベント、それらのクリックの位置など)
キャラクター固有のデータはゲーム内のキャラクターごとに異なるため、それぞれの新しいコピーが必要です。おそらくクラスに入れたいと思うでしょう。残りの部分はよりグローバルであるため、個別に保持することも、ゲーム、ゲーム ループ、入力クラスなどの一部にすることもできます (ただし、整理することを選択します)。
部分的な動きを実際に計算する方法については、他の人が説明しているので、ここでは説明しません。それらの回答を複製しても意味がありません。基本的には、現在の位置と目標位置の間のベクトルを作成し、それを歩行速度で乗算/除算します (1 回の更新で移動した距離に切り刻みます)。