我想让一个角色拿着枪,但是我想让枪随着鼠标移动。例如,如果鼠标已启动,则枪指向上方。如果鼠标在左侧,则枪指向左侧。我使用玩家位置和鼠标位置来构造一个直角三角形,然后使用反正弦来找到仰角。但是,这仅适用于90度的移动。有什么想法,我怎么能接近这个,以便我得到一个完整的360度旋转?
计算角度的代码:
private double calcAngle()
{
double mouseX,mouseY,subX,subY,playerToMouse,mouseToSub,angle;
mouseX = Mouse.getX();
mouseY = Mouse.getY();
subX = mouseX;
subY = y;
playerToMouse = Math.sqrt(Math.pow(x-mouseX,2)+Math.pow(y-mouseY,2));
mouseToSub = Math.sqrt(Math.pow(mouseX-subX,2)+Math.pow(mouseY-subY,2));
angle = Math.toDegrees(Math.asin(mouseToSub/playerToMouse));
return angle;
}
当前旋转(粉红色代表玩家;绿色代表枪;黄色代表鼠标):
答案 0 :(得分:2)
您可以使用Math.atan2(mouseY-gunY, mouseX-gunX)
,它将返回pi和-pi弧度之间的角度,或者在将其转换为度数后返回180和-180度。使用asin
的问题是1/1
等于-1/-1
,这使得函数无法区分它们,并且您希望在每种情况下都有不同的结果。