Ich versuche, meine Entity.cs
Follow(Vector2 point)
einen beliebigen Punkt in der Karte zu machen. Dies muss mit "force" erfolgen. Force ist eine Vector2
von Entity
, die verwendet wird, um die Entity
über die Karte zu verschieben. Auf jedem Update(float elapsedTime)
von Entity
wird Entity
von Force * elapsedTime
bewegt. Wie folgt aus:Folgenden Punkt mit Kraft
public virtual void Update (float elapsedTime)
{
position += force * elapsedTime;
}
Also, ich möchte eine Funktion erstellen ähnlich wie Update
Funktion, genannt Follow
, die genug Kraft auf die Entity
hinzufügen werden, so dass es auf den Punkt bewegt, und stoppt, wenn sie diesen Punkt erreicht .
Dies könnte von bullet Klasse (Kind von Entity
) verwendet werden, um einem Feind zu folgen, oder so etwas, ich glaube, Sie können alle sehen, wofür ich das im Spiel verwenden würde.
Derzeit sieht der Code wie folgt aus:
public virtual void Follow (Vector2 follow, float intensity)
{
if (position != follow) AddForce((follow - position) * intensity);
else AddForce(-force);
}
Und der Code diese Funktion wie diese
Follow(followThisPoint, 300 * elapsedTime);
Hinweis sieht fordern, dass diese Zeile auf jeder Update
genannt wird, und das ist, wie ich würde gerne sein.
Das Problem, das ich mit dieser Funktion habe, ist, dass der Entity zu viel Kraft hinzugefügt wird, und es geht gerade durch den Punkt, wo ich es haben will, und dann, wenn es passiert, verlangsamt es sich, und versucht zurückzugehen, aber dann bekomme ich das gleiche Ergebnis, das ich gerade beschrieben habe, aber in umgekehrter Richtung.
Ich möchte die Kontrolle darüber haben, wie schnell die Entity
dem Punkt von Interesse folgen wird, und es sofort an der Stelle von Interesse stoppen, oder verlangsamen, wenn nah, und an diesem Punkt langsam anhalten.
Edit 1: Wie gewünscht, hier ist die AddForce
Funktion:
public void AddForce (Vector2 addForce)
{
force += addForce;
}
Können Sie die AddForce-Funktion zu Ihrer Frage hinzufügen. Von einem kurzen Gedanken, würde ich den Intensitätswert reduzieren, dem ich folge - (in Ihrem obigen Fall - reduzieren Sie die 300, warum nicht diesen Wert 1) und sehen, ob es wirklich langsamer wird. UND was ist der Wert von force (in Ihrer Follow-Funktion referenziert)? – Neil
Fortsetzung - Wenn Sie sich am Zielpunkt befinden, würden Sie (-force * elimitedtime) nicht nur (-force) verwenden? – Neil
ja, (-force * elimitedtime) ist die richtige, aber ich bin nie dazu gekommen, also konnte ich diese Codezeile nie in Aktion sehen. Die '300' ist die Intensität, also, wenn ich nur 1 setze, bekomme ich das gleiche Ergebnis, aber viel, viel langsamer. Das ist also nicht das eigentliche Problem. Ich werde jetzt AddForce-Funktion hinzufügen, um die Frage – Monset