我对径向计算不是很好,我无法想象因此我无法确定。我需要一些Math.atan2()的解释。
常用任务 - 在鼠标后使对象旋转。我得到差异,得到角度,我看到文本区域中的角度,直接对象确实跟随鼠标。我现在需要的是一切顺利。我需要角度为0-360但在180对象旋转后变为-180并向后计数,并且在270之后鼠标旋转变为-90并且还计数回到0.
更深刻的是,我想要一个平滑的旋转,它意味着每帧的设定速度为2,以最短的方式满足鼠标角度。它需要设置条件,我不能这样做,因为我甚至不理解这些值的逻辑。它们几乎是随机的!我不需要它完成或复制,我需要了解继续前进,如果你能解释它是如何工作的,我做错了什么......
代码很简单: angle = Math.atan2(deltaY,deltaX)/(Math.PI / 180)+90; // + 90导致它缺少它来看鼠标// Object01.rotation = angle;
所以问题是我甚至没有得到它是如何工作的......如果2个值不同,则对象不能指向鼠标,但确实如此。数字谎言,如果我需要基于这些数字的东西,那就错了。非常错误......需要组织。这意味着我希望所有的东西都准备好进行进一步的编码,这些编码将基于旋转而不会因错配而跳起来。
添加:说明它是如何发生的,我上面描述了什么。为什么会出现如此混乱的价值观?正如我所说,我可以就如何安排进一步编码提出建议。如果我想让旋转成为重要事件的元素,如拍摄方向和瞄准速度,那么动画本身就无法工作。或者改变锁定锁的速度旋转。或者更复杂的东西,如果我不做直线和清晰的值就不会工作:从A到Z,从1到10,在2和3之间没有8s,在B之前没有R,当对象面对它时没有鼠标角度270 - 90,当他们都从0开始并一起达到180。 哦,就像我说的那样,鼠标朝向工作,但是当我试图以最快的速度追逐鼠标时,它会在所有4个季度中将对象转向错误的方向。我认为这也是关于这个arctangens事情的问题,delta值在不同的季度变为负值。当我改变它时,其他一些值也会出错...所以我需要知道我正在做什么才能知道什么是错的以及如何解决它。所以,是的。需要解释。请。
Add2:angleZ = Math.atan2(oppSide,adjSide)/(Math.PI / 180); 所以我将轮换分为4个季度,因为每个人都算作对手。支持然后分别添加90,180和270。我的鼠标旋转为360,但是跟随简单对象的对象。旋转= angleZ;仍然是180,然后从左边的-180到0。为什么忽略简单命令?旋转适合,但我需要它是平等的,没有惊喜!为什么会这样?如何将一个数字直接设置为等于另一个数字作为动作的基础,将其自身更改为相同轮换但完全不同的数字?它甚至不知道它的度数!它就像“object.rotation一样简单,请等于我选择的数字!”
答案 0 :(得分:0)
作为一个想法,既然你似乎知道你需要旋转的角度和它的方向,是否更容易为这个角度设置动画以获得平滑的旋转?基本上对待它就像任何其他可动画的属性一样,只需在每帧勾选时加上你的旋转速度(看起来像2度),直到达到所需的旋转。
答案 1 :(得分:0)
这只是不同的坐标系。就像x从舞台左边的0开始,向右移动+ x,向左移动-x,对象旋转从0°向上开始,顺时针旋转+ 180°,逆时针旋转-180°。
Math.atan2碰巧从0开始指向左(-x),顺时针旋转+270˚,逆时针旋转-90˚,这很烦人,但这只是意味着你必须通过添加90来在坐标系之间进行转换˚。
当然,你可以反复旋转一些东西,所以数字会跳跃,以便它们始终保持在相同的范围内,因为361˚与1˚相同,而-270˚与90˚相同。您可以告诉对象在-180˚到180˚范围之外旋转,它会将旋转标准化为这些值。
正如mitim所描述的,要平滑地制作旋转动画,您需要使用Event.ENTER_FRAME
,Timer
或补间库TweenLite。大多数补间库可以为您设置最短的旋转方向,但是您可以简单地计算两者并查看哪个更小。