您的位置:首页 > 编程语言

[LIBGDX学习]LibGDX代码详解(九)Box2D revolute joint

2018-02-22 19:09 459 查看
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.EdgeShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef;

/**
* Revolute Joint 转动关节
*/
public class Chain extends Box2DTest {

@Override
protected void createWorld (World world) {
Body ground;

{
BodyDef bd = new BodyDef();
ground = world.createBody(bd);

EdgeShape shape = new EdgeShape();
shape.set(new Vector2(-40, 0), new Vector2(40, 0));

ground.createFixture(shape, 0.0f);// 从形状创建一个存在物
shape.dispose();// 创建了存在物就处理掉形状
}

{
PolygonShape shape = new PolygonShape();
//shape.setAsBox(0.6f, 0.125f);
shape.setAsBox(0.49f, 0.125f);

FixtureDef fd = new FixtureDef();
fd.shape = shape;
fd.density = 20.0f;
//fd.density = 200000.0f;
//fd.friction = 0.2f;
fd.friction = 1000f;

RevoluteJointDef jd = new RevoluteJointDef();

// 意思是一个关节的两个body能不能碰撞
// 由于这个场景两个body是连在一起,设为true结果是整个链条变得不灵活
jd.collideConnected = false;

float y = 25.0f;
Body prevBody = ground;
for (int i = 0; i < 30; i++) {
BodyDef bd = new BodyDef();
bd.type = BodyType.DynamicBody;
bd.position.set(0.5f + i, y);
Body body = world.createBody(bd);
body.createFixture(fd);

//Vector2 anchor = new Vector2(i, y);
Vector2 anchor = new Vector2(i, y);
jd.initialize(prevBody, body, anchor);
world.createJoint(jd);
prevBody = body;
}

shape.dispose();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: