奇怪的旋转值

时间:2012-04-06 02:49:49

标签: actionscript-3 rotation trigonometry

我有一个物体(称为tempEnemy)飞来飞去拍摄。 问题是我无法保持tempEnemy.rotate值为正值,即 它应在0到359度之间。目前rotateTo范围从: rotateTo< 0(bug)&& rotateTo> 0&& rotateTo> 359(错误)。

tempEnemy.dX = tempEnemy.destX - tempEnemy.x;
tempEnemy.dY = tempEnemy.destY - tempEnemy.y;

//I added 180 because my tempEnemy object was looking and shooting to the wrong direction
tempEnemy.rotateTo = (toDegrees(getRadians(tempEnemy.dX, tempEnemy.dY))) + 180; 

if (tempEnemy.rotateTo > tempEnemy.frame + 180) tempEnemy.rotateTo -= 360;
if (tempEnemy.rotateTo < tempEnemy.frame - 180) tempEnemy.rotateTo += 360;

tempEnemy.incFrame = int((tempEnemy.rotateTo - tempEnemy.frame) / tempEnemy.rotateSpeed);

2 个答案:

答案 0 :(得分:3)

您始终可以使用模运算符(%)来保持值为正值。该模块计算除法的其余部分。

E.g。 (示例使用整数在那里进行除法总是剩下的。)

19 % 5 = 4

因为数字19 5只适合3次(3 * 5 = 154 * 5 = 20,20太高),左边是4(19 - 15)。这是模数。

额外的例子:

7 % 3 = 1
15 % 4 = 3
21 % 9 = 3

模运算的输出永远不会高于右手运算符 - 1因此它非常适合您的问题。

如果您的物体旋转了1234度,则使用模数360进行操作,以获得0到360之间的相应数字。

1234 % 360 = 154

其他更简单的例子:

720 % 360 = 0
360 % 360 = 0
540 % 360 = 180
-180 % 360 = 180
-720 % 360 = 0
-540 % 360 = 180

答案 1 :(得分:1)

听起来像是经典的角度平均问题。这是一个适用于平均角度的公式

private function averageNums($a:Number, $b:Number):Number {
    return  = (Math.atan2( Math.sin($a) + Math.sin($b) , Math.cos($a) + Math.cos($b) ));
}