LibGdx--DistanceJoint距离关节

来源:互联网 发布:java poi jar包 编辑:程序博客网 时间:2024/06/02 09:45
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.DistanceJointDef;import com.joye3g.joint.util.Transform;public class DistanceJointDemo implements ApplicationListener{private Box2DDebugRenderer renderer;private OrthographicCamera camera;private static final float PXTM = 30;private World mWorld;@Overridepublic 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);//绘制一个半径为2米的圆形BodyDef mCircleBodyDef1 = new BodyDef();mCircleBodyDef1.type = BodyType.DynamicBody;//圆形的位置在屏幕(60,90)的位置Vector2 vector1 = Transform.ptm(60f, 90f, screenWidth, screenHeight, 20f, 20f, PXTM);mCircleBodyDef1.position.set(vector1);Body mCircle1 = mWorld.createBody(mCircleBodyDef1);CircleShape mCircleShape1 = new CircleShape();mCircleShape1.setRadius(2f);FixtureDef mCircleFix1 = new FixtureDef();mCircleFix1.shape = mCircleShape1;mCircle1.createFixture(mCircleFix1);//绘制一个半径为1米的圆形BodyDef mCircleBodyDef2 = new BodyDef();mCircleBodyDef2.type = BodyType.DynamicBody;//圆形的位置在屏幕(260,30)的位置Vector2 vector2 = Transform.ptm(260f, 30f, screenWidth, screenHeight, 20f, 20f, 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);//给向右方向一个10N的力Vector2 force2 = new Vector2(10f, 0f);mCircle2.setLinearVelocity(force2);//创建一个距离关节DistanceJointDef distanceJointDef = new DistanceJointDef();distanceJointDef.bodyA = mCircle1;distanceJointDef.bodyB = mCircle2;//设置长度为4米distanceJointDef.length = 4f;distanceJointDef.collideConnected = true;mWorld.createJoint(distanceJointDef);}@Overridepublic void resize(int width, int height) {}@Overridepublic void render() {GL10 gl=Gdx.graphics.getGL10();gl.glClear(GL10.GL_COLOR_BUFFER_BIT);mWorld.step(Gdx.graphics.getDeltaTime(), 8, 6);renderer.render(mWorld, camera.combined);}@Overridepublic void pause() {}@Overridepublic void resume() {}@Overridepublic void dispose() {}}


 

package com.joye3g.joint.util;import com.badlogic.gdx.math.Vector2;public class Transform {/** * @param x_px图片所在x坐标 * @param y_px图片所在y坐标 * @param screenWidth屏幕宽度 * @param screenHeight屏幕高度 * @param width_px图片宽度 * @param height_px图片高度 * @param scale缩放比例 * @return(x,y)直接设置为body的position可使body与图片重合 */public static Vector2 ptm(float x_px, float y_px, float screenWidth, float screenHeight, float width_px, float height_px, float scale){Vector2 vector2 = new Vector2();vector2.x = -(screenWidth - x_px * 2 - width_px) / scale / 2;vector2.y = -(screenHeight - y_px * 2 - height_px) / scale / 2;return vector2;}/** * @param x_mbody所在x坐标 * @param y_mbody所在y坐标 * @param screenWidth屏幕宽度 * @param screenHeight屏幕高度 * @param wh(x,y)body的宽高 * @param scale缩放比例 * @return(x,y)直接设置为图片的position可使图片与body重合 */public static Vector2 mtp(float x_m, float y_m, float screenWidth, float screenHeight, Vector2 wh, float scale){Vector2 vector2 = new Vector2();vector2.x = x_m * scale + screenWidth / 2 - wh.x * scale;vector2.y = y_m * scale + screenHeight / 2 - wh.y * scale;return vector2;}}


 

原创粉丝点击