[LIBGDX学习]LibGDX代码详解(十三)Box2D wield joint

public class Cantilever extends Box2DTest {
	Body m_middle;
	final int e_count = 10;// ori 8

	@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);
			shape.dispose();
		}

		{
			PolygonShape shape = new PolygonShape();
			shape.setAsBox(0.5f, 0.125f);

			FixtureDef fd = new FixtureDef();
			fd.shape = shape;
			fd.density = 20.0f;

			WeldJointDef jd = new WeldJointDef();// 就像焊接起来那样的关节?比较刚硬?

			Body prevBody = ground;
			for (int i = 0; i < e_count; i++) {
				BodyDef bd = new BodyDef();
				bd.type = BodyType.DynamicBody;
				bd.position.set(-14.5f + 1.0f * i, 5.0f);// ground body起点是x零y零?
				Body body = world.createBody(bd);
				body.createFixture(fd);

				Vector2 anchor = new Vector2(-15.0f + 1 * i, 5.0f);
				jd.initialize(prevBody, body, anchor);
				world.createJoint(jd);
				prevBody = body;
			}

			shape.dispose();
		}

		{
			PolygonShape shape = new PolygonShape();
			shape.setAsBox(0.5f, 0.125f);

			FixtureDef fd = new FixtureDef();
			fd.shape = shape;
			fd.density = 20.0f;

			WeldJointDef jd = new WeldJointDef();

			Body prevBody = ground;
			for (int i = 0; i < e_count; i++) {
				BodyDef bd = new BodyDef();
				bd.type = BodyType.DynamicBody;
				bd.position.set(-14.5f + 1.0f * i, 15.0f);
				bd.gravityScale = 10.0f;
				Body body = world.createBody(bd);
				body.createFixture(fd);

				Vector2 anchor = new Vector2(-15.0f + 1.0f * i, 15.0f);
				jd.initialize(prevBody, body, anchor);
				world.createJoint(jd);

				prevBody = body;
			}

			shape.dispose();
		}

		{
			PolygonShape shape = new PolygonShape();
			shape.setAsBox(0.5f, 0.125f);

			FixtureDef fd = new FixtureDef();
			fd.shape = shape;
			fd.density = 20.0f;

			WeldJointDef jd = new WeldJointDef();

			Body prevBody = ground;
			for (int i = 0; i < e_count*0.5f; i++) {
				BodyDef bd = new BodyDef();
				bd.type = BodyType.DynamicBody;
				bd.position.set(-4.5f + 1.0f * i, 5.0f);
				Body body = world.createBody(bd);
				body.createFixture(fd);

				if (i > 0) {// 不和地面连接?
					Vector2 anchor = new Vector2(-5.0f + 1.0f * i, 5.0f);
					jd.initialize(prevBody, body, anchor);
					world.createJoint(jd);
				}

				prevBody = body;
			}

			shape.dispose();
		}

		{
			PolygonShape shape = new PolygonShape();
			shape.setAsBox(0.5f, 0.125f);

			FixtureDef fd = new FixtureDef();
			fd.shape = shape;
			fd.density = 20.0f;

			WeldJointDef jd = new WeldJointDef();

			Body prevBody = ground;
			for (int i = 0; i < e_count*0.4f; i++) {
				BodyDef bd = new BodyDef();
				bd.type = BodyType.DynamicBody;
				bd.position.set(5.5f + 1.0f * i, 10.0f);
				bd.gravityScale = 10.0f;
				Body body = world.createBody(bd);
				body.createFixture(fd);

				if (i > 0) {
					Vector2 anchor = new Vector2(5.0f + 1.0f * i, 10.0f);
					jd.initialize(prevBody, body, anchor);
					world.createJoint(jd);
				}

				prevBody = body;
			}

			shape.dispose();
		}

		for (int i = 0; i < 2; i++) {
			Vector2[] vertices = new Vector2[3];
			vertices[0] = new Vector2(-0.5f, 0);
			vertices[1] = new Vector2(0.5f, 0);
			vertices[2] = new Vector2(0, 1.5f);

			PolygonShape shape = new PolygonShape();
			shape.set(vertices);

			FixtureDef fd = new FixtureDef();
			fd.shape = shape;
			fd.density = 1.0f;

			BodyDef bd = new BodyDef();
			bd.type = BodyType.DynamicBody;
			bd.position.set(-8.0f + 8.0f * i, 12.0f);
			Body body = world.createBody(bd);
			body.createFixture(fd);

			shape.dispose();
		}

		for (int i = 0; i < 2; i++) {
			CircleShape shape = new CircleShape();
			shape.setRadius(0.5f);

			FixtureDef fd = new FixtureDef();
			fd.shape = shape;
			fd.density = 1.0f;

			BodyDef bd = new BodyDef();
			bd.type = BodyType.DynamicBody;
			bd.position.set(-6.0f + 6.0f * i, 10.0f);
			Body body = world.createBody(bd);
			body.createFixture(fd);
			shape.dispose();
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值