Угловая скорость тела - это скорость его вращения, и, если я правильно помню, Box2D измеряет ее в радианах / секунду. Поэтому, если вы установите его на 1, вы увидите медленное вращение.
body.SetAngularVelocity(1);
(Если вы этого не сделаете, это может означать, что я ошибаюсь в единицах, или это может означать, что у вас есть ограничение на тело, препятствующее его вращению.)
Однако звучит так, будто вы хотите, чтобы тело двигалось под определенным углом. Существует функция SetXForm
, которая позволяет вам указать новую позицию и угол, но если вы будете использовать ее, вы будете связываться с системой контактов, и Box2D не будет использовать ее, если элемент действительно не телепортировался с места на место.
Ваше весло не делает этого, так что, возможно, вы могли бы попробовать это.
body.SetAngularVelocity((targetAngle - body.GetAngle()) * x);
x здесь константа, которая контролирует скорость вращения. Установка его в FPS клипа заставит тело щелкнуть в пределах кадра под прямым углом. Установка его ниже приведет к более медленному и плавному повороту на требуемый угол, но также сделает вращение тела более восприимчивым к воздействию при контакте с другими телами.
Тот же трюк работает, чтобы переместить тело в заданное целевое местоположение, но он более многословен:
var delta:b2Vec2 = new b2Vec2(target.x, target.y);
delta.Subtract(body.GetPosition());
delta.Multiply(x);
body.SetLinearVelocity(delta);
Само собой разумеется, что ни один из них не будет работать, если на пути препятствует движению какое-то другое статическое тело. Кроме того, используя любой из них, вы перезаписываете угловые / линейные скорости, которые генерирует Box2D, что означает, что вы идете вразрез с имитацией.
предостережение: код не тестировался и был записан из памяти