私はEntity.cs
Follow(Vector2 point)
の任意のポイントをマップにしようとしています。これは "力"を使って行わなければなりません。地図上でEntity
を移動するために使用されるEntity
のVector2
です。 Update(float elapsedTime)
がEntity
の場合、Entity
はForce * elapsedTime
で移動します。このように:だから次のポイントは力を使用して
public virtual void Update (float elapsedTime)
{
position += force * elapsedTime;
}
、私は、Update
機能と同様の機能を作成することがポイントに移動するようにEntity
に十分な力を加えること、そしてそれがそのポイントに達したときに停止される、Follow
と呼ばれます。
これは弾丸クラス(Entity
の子供)が敵に従うのに使うことができます。そのようなものであれば、私はゲームでそれをどのように使うのか全部見ることができます。現在
public virtual void Follow (Vector2 follow, float intensity)
{
if (position != follow) AddForce((follow - position) * intensity);
else AddForce(-force);
}
そして、この関数を呼び出すコードは、この行はすべてのUpdate
に呼び出されたことを、この
Follow(followThisPoint, 300 * elapsedTime);
ノートのように見え、そしてそれは私どのようにありますやりたい
この関数で問題になっているのは、エンティティにあまりにも多くの力が加わり、右のトラフが通過したい場所に移動してから、通過すると遅くなり、戻ってきますが、私は今説明したのと同じ結果を得ますが、反対方向です。
私は、Entity
が関心のあるポイントを瞬時に停止するか、近くになると遅くなり、そのポイントをゆっくりと止めることを制御したいと考えています。
編集1:要求されたとして、ここAddForce
機能は次のとおりです。私は質問に答える前に
public void AddForce (Vector2 addForce)
{
force += addForce;
}
質問に「AddForce」機能を追加できますか?簡単な思考から、私は後に続く強度値を減らすでしょう - (あなたの上記のケースでは、300を減らして、なぜその値を1にしないか)、それが本当に遅くなるか見てみましょう。あなたのフォロー機能で参照されるフォースの価値は何ですか? – Neil
続行 - 目的地にいるときは、(-force)の代わりに(-force * elapsedtime)を使用しないでください。 – Neil
確かに、(-force * elapsedtime)は正しいものですが、私もそれに気づいていないので、実際にその行のコードを見ることはできません。 '300'は強度なので、1を置くだけで同じ結果が得られますが、はるかに遅くなります。それは本当の問題ではありません。私は今質問にAddForce関数を追加します – Monset