如何旋转对象始终面对鼠标?

时间:2018-05-13 20:22:53

标签: java mouse rectangles drawing2d

我正在尝试制作游戏,我需要玩家(矩形)始终看着鼠标,我已经找到了一些页面,但我似乎无法理解数学。 主:

 g2d.rotate(calculateRotation, x,y);
 g2d.fill(player);
 g2d.rotate(-calculateRotation, x,y);

鼠标侦听器:

 int mx = e.getX();
 int mY = e.getY();

float rotation = Math.atan((mouseX-playerX)/(mouseY-playerY)); //<--- I don't know

would it be something like this?

1 个答案:

答案 0 :(得分:1)

你应该使用线性代数 - 而不是使用正弦和余弦,你使用向量。

如果你有 P1 =(x1,y1)(玩家在哪里)和 P2 =(x2,y2)(鼠标指针所在的位置),那么你有向量 V =(x2-x1,y2-y1)=(v1,v2),其长度为v = | V | = sqrt(v1 ^ 2 + v2 ^ 2)。那么你有一个versor(长度为1的向量)M =(v1 / v,v2 / v)=(m1,m2)。

然后,您可以通过映射(x,y) - &gt;(x * m1-y * m2,x * m2 + y * m1)来旋转点,而不是计算角度。

另见https://en.wikipedia.org/wiki/Rotation_matrix#In_two_dimensions

(并记得小心V = 0)

注意:使用atan是可以的,但你需要检查x和y的符号..如果它们都是负数,你会发现错误的角度;如果一个是正面的而另一个是负面的,你仍然不知道你的箭头是指向NW还是SE。