2016-04-19 7 views
0

Mit diesem kleinen Stück Code habe ich es möglich gemacht, das 'Monster' zum Avatar zu drehen, aber wenn der Avatar hinter dem ist "Monster", das "Monster" ist vom Avatar abgewandt. (Bild ist unten)Drehung zwischen 2 Punkten beim Blick auf den Rücken beim Blick in Richtung Stehen (Bilder)

Hinweis: Die weißen Zahlen sind der Wert der m_RotationAngle

DOUBLE2 mousePos = GAME_ENGINE->GetMousePosition(); 

double xDiff = m_ActPtr->GetPosition().x - mousePos.x; 
double yDiff = m_ActPtr->GetPosition().y - mousePos.y; 
m_RotationAngle = atan(yDiff, xDiff); 
m_ActPtr->SetAngle(m_RotationAngle); 

Avatar standing behind monstersAvatar standing infront of monsters

Ich habe versucht, es zu beheben mit:

if (diff.x < 0) 
{ 
    m_RotationAngle = -atan(diff.y/diff.x); 
    //also tried following but gave and error: 
    //m_RotationAngle = tan(diff.y/diff.x); 
} 
else 
{ 
    m_RotationAngle = atan(diff.y/diff.x); 
} 

Aber das gab die folgende Ausgabe:

enter image description here

Antwort

1

Sie suchen wahrscheinlich für atan2(yDiff, xDiff);, die den Arcustangens von Ydiff/Xdiff mit den Zeichen der Argumente berechnet den richtigen Quadranten zu bestimmen, statt atan (die auch nur ein Parameter erforderlich).

Beachten Sie, dass das Ergebnis im Bereich [-π; + π] Radianten, nicht Grad.