【发布时间】:2021-11-29 22:00:07
【问题描述】:
我在libGDX 中创建了几个Box2D 绳索接头。绳索感觉有点太松软了。怎样才能使绳索更硬?主要的Box2D project 在他们的测试台演示中显示了一个刚度选项:
右侧的绳索显示了所需的刚度:
libGDX Box2D 中是否存在这样的选项?
这就是我在libGDX 中创建绳索的方式:
private void initRopeJoints() {
Array<Body> bodies = new Array<Body>();
bodies.add(BodyBuilder.createBox(world,250,360,32,32,true,true));
for(int i = 1; i < 5; ++i) {
bodies.add(BodyBuilder.createBox(world, 250, -i * 32 +300, 4, 32, false, false));
RopeJointDef rDef = new RopeJointDef();
rDef.bodyA = bodies.get(i - 1);
rDef.bodyB = bodies.get(i);
rDef.collideConnected = true;
rDef.maxLength = 1f; // meters because box2d works in meters
rDef.localAnchorA.set(0, -0.5f);
rDef.localAnchorB.set(0, .5f);
world.createJoint(rDef);
}
}
// makes stronger rope - e.g. will not break
private void initRopeJointsSecondApproach() {
Array<Body> bodies = new Array<Body>();
bodies.add(BodyBuilder.createBox(world,250,60 +270,32,4,true,true));
for(int i = 1; i < 20; ++i) {
bodies.add(BodyBuilder.createBox(world, 250, -i * 4 +270, 4, 4, false, false));
RopeJointDef rDef = new RopeJointDef();
rDef.bodyA = bodies.get(0);
rDef.bodyB = bodies.get(i);
rDef.collideConnected = true;
rDef.maxLength = i * .25f;
rDef.localAnchorA.set(0, -.125f);
rDef.localAnchorB.set(0, .125f);
world.createJoint(rDef);
RevoluteJointDef jDef = new RevoluteJointDef();
jDef.bodyA = bodies.get(i - 1);
jDef.bodyB = bodies.get(i);
jDef.localAnchorA.set(0, -.125f);
jDef.localAnchorB.set(0, .125f);
world.createJoint(jDef);
}
}
【问题讨论】: