0

我对径向计算不是很好,我无法想象,因此我不能确定。我需要一些关于 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 个季度中将对象转向错误的方向。我假设它' s 还有关于这个反正切的事情,它在不同的季度有 delta 值变为负数的问题。当我更改它时,其他一些值会出错......所以我需要确切地知道我在做什么才能知道出了什么问题以及如何解决它。所以是的。需要解释。请。

Add2: 角度Z = Math.atan2(oppSide,adjSide)/(Math.PI/180); 所以我将轮换分为 4 个季度,每个季度我都将 atan 视为 opp。侧向 adj. 边,然后分别添加 90、180 和 270。我的鼠标旋转 360 度,但是通过简单 object.rotation = angleZ; 跟随的对象 仍然到 180,然后从左侧的 -180 到 0。为什么它忽略了简单的命令?旋转适合,但我需要它是平等的,没有惊喜!为什么会这样?我直接设置为等于另一个数字作为动作的基础的数字如何将自身更改为相同旋转但完全不同的数字?它甚至不知道它的度数!就像“object.rotation,请等于我选择的数字!”一样简单!

4

2 回答 2

0

作为一个想法,由于您似乎知道需要旋转的角度及其方向,因此朝着该角度进行动画处理以获得平滑旋转会更容易吗?基本上将其视为任何其他可动画属性,只需添加每帧刻度的旋转速度(看起来像 2 度),直到达到所需的旋转。

  1. 找到旋转所需的角度量
  2. 弄清楚是顺时针还是逆时针方向并设置旋转量。这可以通过检查角度是否大于 180 / 正或负来计算
  3. 每帧刻度添加旋转量*方向,直到所需的旋转小于或等于每帧的旋转量
  4. 将旋转设置为所需的旋转
于 2013-02-13T03:32:01.173 回答
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、 a或TweenLite 之Timer类的补间库。大多数补间库可以为您计算出最短的旋转方向,否则您可以简单地计算两者并查看哪个更小。

于 2013-02-13T13:43:38.470 回答