0

我无法让我的怪物朝向正确的方向。这是我的代码:

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);
}

我遇到的问题是,有时怪物会向后走,简而言之,它面向错误的方向,有人可以帮我解释一下我做错了什么吗?

4

1 回答 1

2

您必须检查deltaXdeltaY值的符号以确定如何处理该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;

...或其他一些正负值的组合。您应该能够测试出什么可以为您的坐标系提供正确的结果。

于 2013-06-22T20:25:19.070 回答