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; 

我还没有收集到一个函数的代码,但它会很容易这样做。