Box2D WeldJoint не работает правильно
Перед моим вопросом мой английский очень авантюрный...
В моем приложении libgdx я реализовал Box2D. Итак, я создал мир и добавил их 2 тела. Первое тело - это PolygonShape, установленный как коробка, которая статична и вращается в середине моего мира. Второе тело - это просто круг, который динамичен и падает поверх первого тела. Когда падающий круг сталкивается с коробкой, я создаю WeldJoint и ожидаю, что круг теперь тоже вращается с коробкой... Но примерно через 20 градусов круг останавливает его вращение внутри коробки и не двигается больше...
Мой код:
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.StaticBody;
bodyDef.position.set(10, 8);
mainBox = world.createBody(bodyDef);
PolygonShape polygonShape = new PolygonShape();
polygonShape.setAsBox(1, .5F);
mainBox.createFixture(polygonShape, 1);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = polygonShape;
fixtureDef.density = .1F;
fixtureDef.friction = .5F;
fixtureDef.restitution = .2F;
Fixture f = mainBox.createFixture(fixtureDef);
f.setUserData("mainbox");
mainBox.setUserData("mainbox");
/* ------------------------------------------------------------------------------------------ */
bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(10, 20);
shootBall = world.createBody(bodyDef);
shootBall.setUserData("shootball");
CircleShape circleShape = new CircleShape();
circleShape.setRadius(.2F);
fixtureDef = new FixtureDef();
fixtureDef.shape = circleShape;
fixtureDef.density = .5F;
fixtureDef.friction = .5F;
fixtureDef.restitution = .3F;
f = shootBall.createFixture(fixtureDef);
f.setUserData("shootball");
circleShape.dispose();
world.setContactListener(new ContactListener(){
@Override
public void beginContact(Contact contact) {
if(contact.getFixtureA().getBody().getUserData().equals("mainbox") && contact.getFixtureB().getBody().getUserData().equals("shootball")){
contact.getFixtureA().getBody().setUserData("createjoint");
System.out.println("contact!");
}
}
И в моем цикле рендеринга:
if(mainBox.getUserData().equals("createjoint")){
WeldJointDef jointDef = new WeldJointDef();
jointDef.bodyA = mainBox;
jointDef.bodyB = shootBall;
jointDef.initialize(mainBox, shootBall, mainBox.getPosition());
world.createJoint(jointDef);
mainBox.setUserData("mainbox");
}
Игнорировать плохой код, он просто для тестирования...
Спасибо:)