Movieclip перестает вращаться после того, как его Box2D Body - PullRequest
2 голосов
/ 01 декабря 2011

Я создал автомобильную игру, используя Box2D [во Flash], и у меня осталась одна ошибка, которую я не могу исправить.Я добавил графику и поместил ее поверх корпуса Box2D.Все прошло так же хорошо, как и ожидалось, но после поворота X ролики для автомобильных колес перестали вращаться.Я делаю что-то вроде этого wheelSprite.rotation = wheelBody.GetAngle() * 180 / Math.PI.Я запустил отдельную программу и увидел, что если вы делаете X.rotation += variable и увеличиваете переменную каждый кадр, после ~ 30 000 (значение переменной) MovieClip перестает вращаться, поэтому я сбрасываю его на 0 после ~ 28 000.мне делать?wheelBody.GetAngle() продолжает расти, и мне нужно, чтобы оно выглядело реальным.Как мне его сбросить?

Ответы [ 4 ]

4 голосов
/ 01 декабря 2011

Я столкнулся с этой проблемой некоторое время назад.Решение было:

rotation = newRotation % 2*Math.PI;

Это означает, что вращение должно быть между 0 и 360 градусами (0 - 2 * PI).

2 голосов
/ 03 мая 2013

Остальное решить эту проблему:

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

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

0 голосов
/ 09 июня 2016

В руководстве 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;

Я не собрал код в функцию, но это было бы легко сделатьпоэтому.

0 голосов
/ 01 декабря 2011

Разве вы не можете использовать функцию SetAngle (), чтобы установить угол на эквивалентный угол?

т.е.: если угол поворота превышает 360 градусов, установите его обратно в 0?

...