我正在创建一个使用三角法计算和显示动态文本框中的距离和度数的游戏。我正在计算光标距离影片剪辑中心的距离。使用影片剪辑的中心,当我的光标在swf周围移动时,我正在尝试计算并显示一个完整的360º。我有游戏的距离部分工作,但显示度数的部分不能正常工作。动态文本框仅显示从90º到270º。它不会超过270º到360º/0º到90º,而是从270º回到90º。以下是我的动作。我非常感谢任何帮助或建议。谢谢!
//Mouse and Dynamic Text Boxes-------------------------
Mouse.hide();
onMouseMove = function () {
feedback.text = "You are moving your mouse";
cursor._x = _xmouse;
cursor._y = _ymouse;
updateAfterEvent();
xmouse_value.text = Math.atan2((a), (b));
ymouse_value.text = Math.round(radians*180/Math.PI)
updateAfterEvent();
};
Mouse.addListener(myListener);
//distance (RANGE)
_root.onEnterFrame = function () {
xmid = Stage.width/2;
ymid = Stage.height/2;
a = _root._ymouse-ymid;
b = _root._xmouse-xmid;
c = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2));
feedbacka.text = Math.round(a);
feedbackb.text = Math.round(b);
feedbackc.text = Math.round(c/30.4);
updateAfterEvent();
var radians:Number;
var degrees:Number;
//Calculcate Radians
//Radians specify an angle by measuring the length around the path of the circle.
radians = Math.atan2((c), (b))
//calculate degrees
//the angle the circle is in relation to the center point
//update text box inside circle
radians_txt = Math.round(radians*360/Math.PI);
degrees_txt = Math.round(radians*180/Math.PI);
updateAfterEvent();
//getting past 270 degrees
radians2_txt = Math.round(radians/Math.PI);
radians2_txt = Math.floor(radians + -270);
}
答案 0 :(得分:0)
atan2
的参数应该是两点之间的delta-y和delta-x,但是你传递的是两点之间的距离和delta-x。试试这个:
radians = Math.atan2(a, b);
下一个问题是将弧度转换为度数。要将弧度转换为度数,您可以执行以下操作:
degrees_txt = radians * 180 / Math.PI;
请注意atan2
从-Math.PI / 2
到Math.PI / 2
之间返回。当转换为度数时,此范围变为-180到180.要转换为0到360,如果结果为负,则可以将结果添加360:
if(degrees_txt < 0) degrees_txt += 360;