效果如下:录制的时候有点卡,实际没有卡顿哈。(基于JBox2d 2.3开发的)
代码结构:
代码:
package com.bmob.im.demo.mobaianimation.widget; import android.view.View; import com.bmob.im.demo.mobaianimation.R; import org.jbox2d.collision.shapes.CircleShape; import org.jbox2d.collision.shapes.PolygonShape; import org.jbox2d.collision.shapes.Shape; import org.jbox2d.common.Vec2; import org.jbox2d.dynamics.Body; import org.jbox2d.dynamics.BodyDef; import org.jbox2d.dynamics.BodyType; import org.jbox2d.dynamics.FixtureDef; import org.jbox2d.dynamics.World; import java.util.Random; /**jbox2d 2.3.1 * Created by Administrator--沈斌 on 2017/10/23. */ public class JboxImp { private static final String TAG = JboxImp.class.getSimpleName(); private World mWorld; private float dt = 1f/ 30f; //运动的频率 private int mVelocityIterations = 5; //每一帧迭代次数 private int mPosiontionIterations = 20; //每一帧计算的位置点 private int mWidth,mHeight; //刚体的边界,宽高 private float mDesity = 0.5f; //刚体密度 private float mRatio = 20; //坐标比率,模拟和真实的映射比率,碰撞的速度以及幅度 private final Random mRandom = new Random(); //随机数 /** * 设置密度 * @param desity */ public JboxImp(float desity){ this.mDesity = desity; } /** * 设置边界(弹力墙的边界) * @param width * @param height */ public void setWorldSize(int width,int height){ this.mWidth = width; this.mHeight = height; } public void createWorld(){ if (mWorld == null){ mWorld = new World(new Vec2(0,10.0f)); updateVerticalBounds(); updateHorzontalBounds(); } } /** * 竖直方向的弹力墙(上和下) */ private void updateVerticalBounds(){ //创建静态刚体 BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyType.STATIC; //静态 PolygonShape box = new PolygonShape(); float boxWidth = switchPositionToBody(mWidth); float boxHeight = 1; //因为垂直,所以高度为1 </