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,导致除零异常