旋转玩家面对客观的Java浮油

时间:2012-12-03 00:36:05

标签: java rotation trigonometry slick2d

所以我正在学习浮油。我一直很好,直到遇到问题。我一直试图找到一个好时光的答案而不能。所以我决定将它发布在这里。

我的问题:我有800 X 800网格上的播放器。我试图让玩家以直线移动到网格上的某个点。现在我可以让他继续前进X然后转向Y,但我想让他尽可能快地到达那里。所以我想我是否可以从以下几点做出一个直角三角形(玩家位置,目标位置,以及X,Y截距,请看我的图像)。

My code:
Adj = (int) (TargetX-x); // Get The size of the Adjacent leg.
Opp =   (int) (TargetY-y); // Get the size of the Opposite leg.
OppAdj = Opp/Adj;          //Inverse tan is Opposite/Adjacent
TargetAngle =  Math.abs(Math.atan(Opp/Adj)*100);  //Keep the angle positive, and use inverse tan to get the missing angle.

现在我认为这样做可以解决缺失的角度,这样我就可以将玩家旋转一定数量,这样玩家就可以直线移动并击中目标。

这最终做的是给我一个73度的目标角度,变量OppAdj最终为1.0。

我的代码出了什么问题?

感谢任何帮助!

谢谢, 凯尔

1 个答案:

答案 0 :(得分:0)

OppAdj = Opp/Adj;

这就是问题所在。你应该这样做:

OppAdj = (double)(Opp)/Adj;

这样,它会为您提供double的准确性。顺便说一下:

TargetAngle =  Math.abs(Math.atan(Opp/Adj)*100);

应该是:

TargetAngle =  Math.abs(Math.atan(OppAdj)*100);