2016-10-31 7 views
0

В libGDX Box2D У меня есть DynamicBody «тело» и StaticBody «якорь» и его соединение с «поворотным шарниром точки» и тело может оборачиваясь «точка опоры» и работает идеальную (позиция 2) ,Box2D тело динамический поворот вокруг точки поворота динамически?

enter image description here

Body body = Box2DUtil.addRectangle(BodyDef.BodyType.DynamicBody); 
Body anchor = Box2DUtil.addRectangle(BodyDef.BodyType.StaticBody); 

RevoluteJointDef revoluteJointDef = new RevoluteJointDef(); 
revoluteJointDef.initialize(anchor, body, anchor.getWorldCenter()); 
world.createJoint(revoluteJointDef); 

Но я хочу повернуть «тело» в spesific угол, когда моделирование работает и сила тяжести = 10 и т.д. тело поворачивается вниз его ОК. Когда я нажимаю кнопку, я хочу превратить тело в положение «myNewAngle» Как показано на рисунке (позиция 1)

float myNewAngle = 0; 
body.setType(BodyDef.BodyType.StaticBody);//for not effected from gravity 
body.setTransform(body.getPosition(), lastAngle * MathUtils.degreesToRadians); 

Моя проблема заключается в моем «тело» вращается вокруг своего происхождения (позиция 3) Я хочу превратить его Обращаясь «точка опоры» я установить «body.setTransform (anchor.getPosition()» но не работал. Я не могу сделать это с «мотором» тоже.

Как я могу повернуть «тело "вокруг„точка опоры“динамический?

+0

Вы должны изменить систему координат на неподвижную раму, а затем сделать поворот там. Что вы хотите повернуть? Угол тела или все его положение? – pingul

+0

@pingul Я хочу изменить угол тела, который имеет «точку опоры», но я хочу повернуть тело вокруг «точки поворота», чтобы какой код был? – MarsPeople

ответ

0

Вы должны повернуть его положение по отношению к точке поворота. Допустим, у нас есть точки fixed, body, и у них есть координата мирового пространства .worldCoordinate. Вы вращаетесь вокруг bodyfixedv градусов по формуле (псевдокод)

pos = body.worldCoordinate() - fixed.worldCoordinate(); 
rotated_pos = rotateVector(pos, v); 
body.setWorldCoordinate(rotated_pos);