0

我得到了一个物体(称为 tempEnemy),它飞来飞去并射击。问题是我不能保持值 tempEnemy.rotateTo 为正值,即它应该在 0 到 359 度之间。目前 rotateTo 的范围为:rotateTo < 0 (bug) && rotateTo > 0 && rotateTo > 359 (bug)。

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);
4

2 回答 2

3

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

例如(示例适用于整数,除法总是有剩余。)

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
于 2012-04-06T11:21:27.290 回答
1

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

private function averageNums($a:Number, $b:Number):Number {
    return  = (Math.atan2( Math.sin($a) + Math.sin($b) , Math.cos($a) + Math.cos($b) ));
}
于 2012-04-06T04:46:08.130 回答