3

私はターンベースのゲームを実装しています。2つの側面があり、各側面には複数のユニットがあり、特定の瞬間ごとに1つのユニットのみがボード上を移動できます。

一度に移動できるユニットは1つだけなので、シミュレーションに関しては、どこに移動すればよいかを判断した後、すぐにテレポートできますが、ゲームをプレイすると、ユニットが移動するのを見て、誰が誰であるかを理解できます。移動し、彼が行った場所。

問題は、移動アルゴリズム(たとえば、N秒で2ポイント間を補間する)をモデルに配置し、移動していることを知らなくても、ビューにユニットが補間された位置にあることを表示させるか、ユニットをテレポートして通知するかです。ユニットが必要なだけ移動していることを示す必要があることを確認してください。

2番目のアプローチを採用する場合、シミュレーションがビューよりもはるかに先に実行されないようにするにはどうすればよいでしょうか。移動が終了した後、シミュレーションを再開するコマンドをビューに配置しますか?

よろしくお願いします、Xtapodi。

4

2 に答える 2

2

ああ、MVCが元々リアルタイムグラフィックス用に設計されたことは一度もないことを思い出させるさらに別の例。;)

現在の位置と前の位置をモデルに保存します。オブジェクトが移動すると、現在の位置が前の位置にコピーされ、新しい位置が現在の位置にコピーされ、モデルが変更されたという通知がビューに送信されます。ビューは、それに応じて古い位置と新しい位置の間を補間できます。モデル内に追加のデータを保存することなく、特定のビュー設定に基づいて補間を高速化、低速化、または完全に削除することもできます。

現在の位置と前の位置を保存するのではなく、各ユニットで最後の移動を保存するだけで、移動自体に前の位置が含まれます。移動に関する追加情報を保存する必要がある場合、これはおそらくより用途が広いでしょう。

于 2010-07-11T16:28:50.380 に答える
0

おそらく必要なのは、ユニットイメージをフレームごとに移動させることです。各フレームで画像を移動する距離は、補間と同様です。

unitsPerSecond = totalUnits /(framesPerSecond * totalSeconds)

したがって、画像を位置0から位置60に2秒で移動し、フレームレートが30の場合、60フレームで60単位移動する必要があるため、速度は1になります。したがって、各フレームで画像を1単位移動します。ユニットを移動すると目的地を超えてしまう場合は、場所を目的地に設定するだけです。

于 2010-07-11T12:17:59.120 に答える