9

サッカーの試合では、操舵動作を使用して操舵力を計算しています。この部分は大丈夫です。しかし、私は単純な2D人間の移動を実装するための最良の方法を探しています。

たとえば、操舵力と現在の速度または進行方向ベクトルの間のcos(角度)が0.5未満の場合、プレーヤーは現在の速度に「操舵」(または単に操舵力から計算された加速度を追加)しないでください。プレイヤーは車両です。人間は、重要な方向転換があると減速し、十分に減速すると新しい方向に加速し始めます。

誰かがこの行動を達成する方法について何かアドバイスやアイデアがありますか?前もって感謝します。

4

4 に答える 4

4

非常に素早く方向を変えますが、完全な摩擦はありません。EGスーパーマリオ

編集:ただし、足はスライドしないでください-足には手続き型アニメーションを使用してください

于 2010-01-25T15:51:47.860 に答える
3

これはすでに「ロボカップ」と呼ばれるイニシアチブで研究開発されています。彼らはあなたが達成しようとしているものに本当に似ているはずのシミュレーション2Dリーグを持っています。

正しい方向を示すリンクは次のとおりです: http ://wiki.robocup.org/wiki/Main_Page

于 2010-01-25T17:29:19.770 に答える
2

多分あなたは曲率を計算することができます。曲率の​​値が大きすぎると、速度が遅くなります。 http://en.wikipedia.org/wiki/Curvature

于 2010-01-25T17:24:08.647 に答える
1

低速では、人間は10セント硬貨をオンにすることができます。高速では、ごくわずかな回転だけで減速する必要はありません。したがって、ターンの速度と半径は強く相関しています。

ターゲットを狙うときに人間がどれだけ減速するかは、実際には自動計算ではなく、判断の呼びかけです。一人の人間がほぼ完全に停止し、急に向きを変えて、ターゲットに向かって直接走る可能性があります。別の人間は、ターゲットまでの全長が長くなったとしても、少しだけ遅くなり、広い曲線を描く可能性があります。唯一の注意点は、目的のターゲットが現在の速度でカーブの半径内にある場合、ターゲットに到達するためにターゲットから遠く離れた広いループを必要とするため、速度を落とすことだけが合理的なパスです(無限に旋回するのではありません)。 )。

これが私がそれを行う方法です。メートル法をご希望の場合は、インペリアル単位をお詫び申し上げます。

  1. これまでに記録された最速の人間は時速28マイル弱で移動しました。あなたの人間のユニットのそれぞれは、時速1マイルから時速28マイルの間の個人的な最高速度を与えられるべきです。
  2. 時速1マイルで直線的に移動する人間の最大加速および最大減速率の29要素の表を作成します。正確である必要はありません。各値の加速値と減速値を概算するだけです。29要素のテーブルの高速、中速、低速バージョンを作成し、各人間をこれらのテーブルの1つに割り当てます。選択したテーブルはユニットの最高速度にマッピングされる可能性があるため、最大10mphのユニットは低速の加速器になります。
  3. 人間がそのmph(0-28)で回転できる最も鋭い半径の29要素のテーブルを作成します。

さて、各人間ユニットをアニメートするときに、ターゲット情報があり、そこから加速度を選択する必要がある場合、タスクはより困難になります。代わりに力ベクトルがある場合は、それが簡単です。力のベクトルから始めましょう。

  1. 力ベクトルの正味加速度と合力角度がユニットの能力の限界を超える場合は、ユニットの新しいベクトルを許可されている最大角度に制限し、現在の線速度に対して最大速度でユニットを減速します。
  2. 次の時計の目盛りの間、ゆっくりと、より鋭く曲がることができます。
  3. 力のベクトルに完全に対応できるが、ユニットがその曲率の最大速度よりも低速で移動している場合は、ユニットがその速度で持つ最大加速度を適用します。

詳細はかなり難しいと思いますが、これは良いスタートだと思います。

ターゲットがあり、適用する力を選択する必要があるパスバージョンの場合、問題は少し異なり、さらに困難です。私は今のところアイデアがありませんが、人間がすでにトップスピードでターゲットから逃げているという例の条件を考えると、一方では間にあるベストタイムのパスがあると言えば十分です、ターゲットへの完全な弧を完成させるために回転しながら十分に減速し、一方、完全に停止し、完全に回転し、ターゲットに向かってまっすぐ走ります。

于 2012-07-26T00:22:43.647 に答える