[LIBGDX学习]LibGDX代码详解(十六)Box2D prismatic joint

package com.mygdx.game.box2d;

import com.badlogic.gdx.Input.Keys;
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.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.joints.PrismaticJoint;
import com.badlogic.gdx.physics.box2d.joints.PrismaticJointDef;

public class Prismatic extends Box2DTest {
	PrismaticJoint m_joint;

	@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(2, 5);

			BodyDef bd = new BodyDef();
			bd.type = BodyType.DynamicBody;
			//bd.position.set(-10, 10);// 相当于第二个轴的位置
            bd.position.set(2, 2);
			bd.angle = 0.5f * (float)Math.PI;
			bd.allowSleep = false;

			Body body = world.createBody(bd);
			body.createFixture(shape, 5.0f);

			PrismaticJointDef pjd = new PrismaticJointDef();// 就是会使物体移动

			//Vector2 axis = new Vector2(2, 1);
			Vector2 axis = new Vector2(1.5f, 1);
			axis.nor();// 变成标准长度
			pjd.initialize(ground, body, new Vector2(0, 0), axis);// axis 就是连着地面的那根不动的轴

			pjd.motorSpeed = 10.0f;
			pjd.maxMotorForce = 10000.0f;
			pjd.enableMotor = true;
//			pjd.lowerTranslation = 0;// 可移动的距离,上下限?
//			pjd.upperTranslation = 20.0f;
            pjd.lowerTranslation = 0f;
            pjd.upperTranslation = 20f;
			pjd.enableLimit = true;

			m_joint = (PrismaticJoint)world.createJoint(pjd);
		}
	}

	public boolean keyDown (int keyCode) {
		if (keyCode == Keys.L) m_joint.enableLimit(!m_joint.isLimitEnabled());// 这个一关就无限运动
		if (keyCode == Keys.M) m_joint.enableMotor(!m_joint.isMotorEnabled());
		if (keyCode == Keys.S) m_joint.setMotorSpeed(-m_joint.getMotorSpeed());

		return false;

	}

	public void render () {
		super.render();

		// if (renderer.batch != null) {
		// renderer.batch.begin();
		// // renderer.batch.drawText(renderer.font, "Keys: (l) limits, (m) motors, (s) speed", 0,
// Gdx.app.getGraphics().getHeight(),
		// // Color.WHITE);
		// // renderer.batch.drawText(renderer.font, "Motor Force = " + m_joint.getMotorForce(), 0,
		// // Gdx.app.getGraphics().getHeight() - 15, Color.WHITE);
		// renderer.batch.end();
		// }
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值