C# 如何让我的怪物面对正确的方向?

C# 如何让我的怪物面对正确的方向?,c#,xna,C#,Xna,我在让我的怪物朝向正确的方向时遇到了问题。 这是我的密码: void RotateMonster(Monster monster) { float deltaX = monster.Target.X - monster.coordinate.X; float deltaY = monster.Target.Y - monster.coordinate.Y; float tangentable = deltaX / deltaY; monster.Rotat

我在让我的怪物朝向正确的方向时遇到了问题。 这是我的密码:

void RotateMonster(Monster monster)
{
     float deltaX = monster.Target.X - monster.coordinate.X;
     float deltaY = monster.Target.Y - monster.coordinate.Y;
     float tangentable = deltaX / deltaY;
     monster.Rotation = (float)Math.Atan(tangentable);
}

我遇到的问题是,有时怪物会朝着错误的方向后退。简而言之,有人能为我解释一下我做错了什么吗?

你必须检查
deltaX
deltaY
值的符号,以确定如何处理
Atan
方法的结果

Atan
方法不知道是否使用正值或负值来计算切线,例如,它无法区分
100/50
-100/-50
之间的差异。对于某些组合,必须向角度添加半个旋转

我不知道到底什么是价值观,但基本上是这样的:

float angle = (float)Math.Atan(tangentable);
if ((deltaX < 0 && deltaY >= 0) || (deltaX >= 0 && deltaY < 0)) {
  angle = angle + Math.PI;
}
monster.Rotation = angle;
float angle=(float)Math.Atan(可切);
如果((deltaX<0&&deltaY>=0)| |(deltaX>=0&&deltaY<0)){
角度=角度+数学.PI;
}
旋转=角度;

…或其他正负值的组合。您应该能够测试出坐标系的正确结果。

我认为可以使用
Atn2
。但是问题中的deltaX/deltaY看起来很奇怪。这不起作用,我以前听说过atan2,但从未意识到它是如何工作的。注意,如果怪物平行于X轴移动,deltaY将为0,导致除零异常