LibGdx--PrismaticJoint移动关节
[html]
package com.joye3g.joint;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
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.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.EdgeShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.joints.PrismaticJointDef;
import com.joye3g.joint.util.Transform;
public class PrismaticJointDemo implements ApplicationListener{
private Box2DDebugRenderer renderer;
private OrthographicCamera camera;
private static final float PXTM = 30;
private World mWorld;
@Override
public void create() {
float screenWidth = Gdx.graphics.getWidth();
float screenHeight = Gdx.graphics.getHeight();
renderer = new Box2DDebugRenderer();
camera = new OrthographicCamera(screenWidth / PXTM, screenHeight / PXTM);
mWorld = new World(new Vector2(0f, -10f), true);
//绘制地面
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.StaticBody;
bodyDef.position.set(-screenWidth / PXTM / 2, -screenHeight / PXTM / 2);
Body mLine = mWorld.createBody(bodyDef);
EdgeShape edgeShape = new EdgeShape();
edgeShape.set(new Vector2(0f, 1f), new Vector2(screenWidth / PXTM, 1f));
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = edgeShape;
mLine.createFixture(fixtureDef);
//绘制一个半径为1米的圆形
BodyDef mCircleBodyDef1 = new BodyDef();
mCircleBodyDef1.type = BodyType.DynamicBody;
//圆形的位置在屏幕(60,190)的位置
Vector2 vector1 = Transform.ptm(60f, 190f, screenWidth, screenHeight, 0f, 0f, PXTM);
mCircleBodyDef1.position.set(vector1);
Body mCircle1 = mWorld.createBody(mCircleBodyDef1);
CircleShape mCircleShape1 = new CircleShape();
mCircleShape1.setRadius(1f);
FixtureDef mCircleFix1 = new FixtureDef();
mCircleFix1.shape = mCircleShape1;
mCircle1.createFixture(mCircleFix1);
//绘制一个半径为1米的圆形
BodyDef mCircleBodyDef2 = new BodyDef();
mCircleBodyDef2.type = BodyType.DynamicBody;
//圆形的位置在屏幕(200,190)的位置
Vector2 vector2 = Transform.ptm(200f, 190f, screenWidth, screenHeight, 0f, 0f, PXTM);
mCircleBodyDef2.position.set(vector2);
Body mCircle2 = mWorld.createBody(mCircleBodyDef2);
CircleShape mCircleShape2 = new CircleShape();
mCircleShape2.setRadius(1f);
FixtureDef mCircleFix2 = new FixtureDef();
mCircleFix2.shape = mCircleShape2;
mCircle2.createFixture(mCircleFix2);
//绘制一个半径为1米的圆形(静态)
BodyDef mCircleBodyDef3 = new BodyDef();
mCircleBodyDef3.type = BodyType.StaticBody;
//圆形的位置在屏幕(60,100)的位置
Vector2 vector3 = Transform.ptm(60f, 100f, screenWidth, screenHeight, 0f, 0f, PXTM);
mCircleBodyDef3.position.set(vector3);
Body mCircle3 = mWorld.createBody(mCircleBodyDef3);
CircleShape mCircleShape3 = new CircleShape();
mCircleShape3.setRadius(1f);
FixtureDef mCircleFix3 = new FixtureDef();
mCircleFix3.shape = mCircleShape3;
mCircle3.createFixture(mCircleFix3);
//创建一个移动关节
PrismaticJointDef prismaticJointDef = new PrismaticJointDef();
prismaticJointDef.bodyA = mCircle1;
prismaticJointDef.bodyB = mCircle2;
//最小位移偏移量
prismaticJointDef.lowerTranslation = 3f;
//启动限制
prismaticJointDef.enableLimit = true;
mWorld.createJoint(prismaticJointDef);
}
@Override
public void resize(int width, int height) {
}
@Override
public void render() {
GL10 gl=Gdx.graphics.getGL10();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
mWorld.step(Gdx.graphics.getDeltaTime(), 8, 6);
render
补充:Web开发 , 其他 ,