MovieClip在Box2D后停止旋转Body
我用Box2D制作了一款汽车游戏[在Flash中],我还有一个剩余的错误,我无法修复。我添加了图形并将它们放在Box2D主体的顶部。一切都如预期一样好,但在X轮旋转后,电影剪辑车轮,停止旋转。我做了这样的事情wheelSprite.rotation = wheelBody.GetAngle() * 180/Math.PI
。我运行了一个单独的程序,我看到如果你做了X.rotation += variable
并且你在每帧增加变量,在〜30 000(变量的值)之后,MovieClip停止旋转,所以我在〜28 000后将它重置为0。做? wheelBody.GetAngle()
不断上升,我需要它使它看起来真实。我该如何重置?MovieClip在Box2D后停止旋转Body
您不能使用SetAngle()函数将角度设置为等效角度吗?
ie:如果角度旋转360度,将其设置回0?
前段时间我遇到了这个问题。解决方案是:
rotation = newRotation % 2*Math.PI;
这意味着旋转必须在0到360度之间(0 - 2 * PI)。
剩余解决这个问题:
yourMC.rotation = (yourMCbody.GetAngle() * 180/Math.PI) % 360;
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#modulo
的Box2D的手动指定机构的转动是*的,并经过一段时间可能会大,你可以,您可以在使用SetAngle
复位。我使用while循环来计算标准化角度(你可以用浮点操作数显然调用模,但我不知道这是否对性能不好)。此代码将角度标准化为0 <= angle < 2pi
,但我也看到角度有时会标准化为-pi <= angle < pi
。
const 2PI:Number = Math.PI * 2;
var rotation:Number = wheelBody.GetAngle();
// normalize angle
while(rotation >= 2PI)
rotation -= 2PI;
while(rotation < 0)
rotation += 2PI;
// store the normalized angle back into Box2D body so it doesn't overflow (optional)
wheelBody.SetAngle(rotation);
// convert to degrees and set rotation of flash sprite
wheelSprite.rotation = rotation * 180/Math.PI;
我还没有收集到一个函数的代码,但它会很容易这样做。