2010-12-13 10 views
2

Ich versuche, XNA zu lernen, indem ich ein kleines 2D-Spiel schreibe, es ist eine Top-Down-Perspektive und ich versuche, doppelte Bewegung zu haben, mit den Links-Rechts- und Auf-Ab-Tasten entlang der Achse Außerdem können Sie direkt auf den Mauszeiger schauen, so dass der Spieler gleichzeitig rennen und zielen kann.Vector Mathematik, finde den Winkel

Ich habe einen Vektor für die Spielerposition (m_PlayerPos) und einen Vektor für die Mausposition (m_MousePos), und ich versuche, den richtigen Winkel zur Mausposition zu bekommen.

Im mit der Formel-Methode:

 
public static float Angle(Vector2 from, Vector2 to) 
{ 
    return (float)Math.Atan2(from.X - to.X, from.Y - to.Y); 
} 

Dies funktioniert, aber aus irgendeinem Grund die Methode funktioniert nur auf halbem Weg entlang der x-Achse. Wenn sich die Maus genau links vom Spieler befindet, schaut der Spieler direkt auf die Maus.

Aber wenn ich an die Spitze des Players gehe, sieht es nach unten, und wenn die Maus unter dem Player ist, schaut der Spieler nach oben. Also muss ich die Y-Achse umkehren, aber ich bin mir nicht sicher, wie.

Vielen Dank im Voraus für eine Rückmeldung.

+0

Sie sollten beachten, Math.Atan2 erwartet y dann x, so dass Ihre Argumente ausgetauscht werden – freespace

Antwort

2

Verwenden Sie .

0

Multiplizieren Sie es mit (0.0, -1.0) (oder einfach die Y-Komponente mit -1.0 multiplizieren). Dies spiegelt den Vektor entlang der horizontalen Achse und sollte das gewünschte Ergebnis erzielen.

0

Im Bildschirmbereich befindet sich der Ursprung in der oberen linken Ecke, wobei die Y-Achse nach unten zeigt, während in einem klei- nen Raum die Y-Achse nach oben zeigt. Deshalb beobachten Sie, dass die Y-Achse "umgedreht" wird.