В руководстве 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;
Я не собрал код в функцию, но это было бы легко сделатьпоэтому.