Movieclip在它的Box2D Body之后停止旋转

时间:2011-11-30 20:57:29

标签: actionscript-3 box2d

我使用Box2D制作了一款汽车游戏[在Flash中]我还有一个剩余的bug,我无法修复。我添加了图形并将它们放在Box2D机身的顶部。一切都和预期的一样好,但在X旋转之后,车轮的电影剪辑停止旋转。我这样做wheelSprite.rotation = wheelBody.GetAngle() * 180 / Math.PI。我运行了一个单独的程序,我看到了,如果你做X.rotation += variable并且每帧增加变量,在~30 000(变量值)之后MovieClip停止旋转,所以我在~28 000之后将其重置为0 。 我该怎么办? wheelBody.GetAngle()不断上升,我需要它才能让它看起来真实。我该如何重置它?

4 个答案:

答案 0 :(得分:4)

我前段时间遇到过这个问题。解决方案是:

rotation = newRotation % 2*Math.PI;

这意味着旋转必须介于0到360度之间(0 - 2 * PI)。

答案 1 :(得分:2)

剩余部分解决了这个问题:

yourMC.rotation = (yourMCbody.GetAngle() * 180 / Math.PI) % 360;

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#modulo

答案 2 :(得分:0)

你不能使用SetAngle()函数将角度设置为等效角度吗?

ie:如果角度旋转超过360度,请将其设置为0?

答案 3 :(得分:0)

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;

我没有将代码收集到函数中,但这样做很容易。