我遇到了让我的怪物面向正确方向的问题。 这是我的代码:
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);
}
我遇到的问题是,有时怪物向后走,它面向错误的方向,有人可以帮我解释一下我做错了什么?
答案 0 :(得分:2)
您必须检查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;
......或其他一些积极和消极价值的组合。您应该能够测试出什么能为您的坐标系提供正确的结果。