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;}}
- LibGdx--DistanceJoint距离关节
- 7.Libgdx扩展学习之Box2D_距离关节 旋转关节
- libgdx之RevoluteJointDef关节
- libgdx之PrismaticJoint关节
- libgdx之FrictionJoint关节
- libgdx之WeldJointDef关节
- LibGdx--PrismaticJoint移动关节
- LibGdx--PulleyJoint滑轮关节
- LibGdx--WeldJoint焊接关节
- LibGdx--GearJoint齿轮关节
- LibGdx--MouseJoint鼠标关节
- LibGdx--PulleyJoint滑轮关节
- DistanceJoint
- 6.Libgdx扩展学习之Box2D_鼠标关节
- 关节
- SpriteBuilder中的距离关节的min和max距离属性值
- Physx中的DistanceJoint
- libGDX
- Arlicle
- 关于typedef的用法总结
- 康托尔、哥德尔、图灵——永恒的金色对角线
- 单色位图的联通性
- 一个不完全恢复的疑惑?
- LibGdx--DistanceJoint距离关节
- Struts2常用标签总结
- 【洛奇】系列2
- hadoop基本操作命令
- Attribute与Property的区别
- 链表相关函数
- ubuntu12.0.4 开机自动启动svn
- 2、opengl es中不同的绘制方式
- SHGetFileInfo函数