Dies ist wahrscheinlich eine einfache Vektorfrage, aber ich bin mir nicht sicher, wie ich das machen soll.
Ich habe ein Objekt an der Vektorposition (ox,oy)
. Möglicherweise läuft der Benutzer bei jedem Update über den Bildschirm und ist zu (px,py)
jedem Zeitpunkt an der richtigen Position . Wie mache ich es so, dass das Objekt immer zum Spieler zeigt? Ich muss den Winkel in Grad bekommen.
Damit habe ich herumgespielt, aber die Richtung zeigt nicht sofort, wo sich der Benutzer befindet. Stattdessen erhöht es sich langsam in die Richtung, in die der Benutzer geht.
objVec.Normalize();
playerVec.Normalize();
obj.Rotation = MathHelper.ToDegrees((float)Math.Acos(Vector2.Dot(objVec, playerVec)));
Ich könnte völlig falsch vorgehen, daher ist jede Hilfe willkommen!
Antworten:
Denken Sie anders über das Problem nach. Sie möchten immer Einwände erheben, um dem Spieler "ins Gesicht zu sehen", was bedeutet, dass sein "vorwärts" gedrehter Vektor parallel zum Vektor von sich selbst zum Spieler sein soll. Unter der Annahme, dass sein "Vorwärts" -Vektor normalerweise bei ist
obj.Rotation = 0
, ist die richtige Drehung im Grunde der Arkustangens vonVector2.Subtract(playerPos, objectPos)
. Die meisten Mathematikbibliotheken haben so etwas wieatan2
zwei Argumente oder einesVector2
, das automatisch den richtigen Quadranten für Sie herausfindet.EDIT: Ich habe festgestellt, dass Sie in C # sind und dies tatsächlich integrierte Klassen sind. Sie müssen also nicht nach Dokumentation für die Mathematikbibliothek suchen, ich kann das für Sie tun. Der richtige Code sollte sein:
Beachten Sie die X / Y-Umkehrung. Bei hysterischen Rosinen sind bei Atan2 die Argumente immer umgekehrt.
quelle