我有一个物体(称为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);
答案 0 :(得分:3)
您始终可以使用模运算符(%
)来保持值为正值。该模块计算除法的其余部分。
E.g。 (示例使用整数在那里进行除法总是剩下的。)
19 % 5 = 4
因为数字19 5只适合3次(3 * 5 = 15
,4 * 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) ));
}