2016-10-31 3 views
0

Dans libGDX Box2D i ont un DynamicBody "corps" et StaticBody "ancre" et son joint de "point de pivot commun" et le corps peut tourner autour "point pivot" et parfait état (position 2) .Box2D corps dynamique tournez le point de pivot dynamiquement?

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); 

Mais je veux tourner le « corps » à spesific angle, lorsque la simulation est en cours d'exécution et de la gravité = 10 etc le corps se tourne vers le bas son OK. Lorsque je clique sur un bouton je veux tourner le corps en position « myNewAngle » Comme il est indiqué dans l'image (position 1)

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

Mon problème est mon « corps » tourne autour de son origine (position 3) je veux tourner aroud "point pivot" i mis "body.setTransform (anchor.getPosition()" mais sa ne fonctionne pas. Je ne peux pas le faire avec "moteur" aussi.

Comment puis-je tourner « corps «autour» du point de pivotement «dynamique»

+0

Vous devez changer le cadre de référence au cadre fixe, puis faire la rotation là-bas. Qu'est-ce que vous voulez faire pivoter? L'angle du corps, ou toute sa position? – pingul

+0

@pingul je veux changer l'angle du corps qui a "point de pivot", mais je veux tourner le corps autour du "point de pivot" donc quel code devrait être? – MarsPeople

Répondre

0

Vous devez faire pivoter sa position par rapport au point de pivotement. Disons que nous avons les points fixed, body, et ceux-ci ont quelques coordonnées de l'espace du monde .worldCoordinate. Vous faites pivoter body autour fixedv degrés par (pseudo-code)

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