canvas教程

JBox2d入门学习二 我的小鸟

字号+ 作者:H5之家 来源:H5之家 2015-11-11 13:47 我要评论( )

JBox2d入门学习二 我的小鸟 入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力。最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧。 贴代码,注解写的比较详细了,就不多说了,其实JBOX

JBox2d入门学习二 —–我的小鸟

入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力。最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧。

贴代码,注解写的比较详细了,就不多说了,其实JBOX2D是足够强大的.我们只需要在世界当中创建物体,并且在模拟的时候将世界当中的刚体的运动同步到我们自己想要显示的view当中,这整个过程就实现了。

public class FlyBallDemoActivity extends Activity {
private final static int RATE = 10;// 屏幕到现实世界的比例
// 10px:1m;这里要注意,当我们根据android当中的坐标去定义刚体的位置时,我们需要将坐标除以这个比例获得世界当中的长度,用这个长度来进行定义。
private AABB worldAABB; // 创建一个坐标系统
private World world; // 创建一个世界
private float timeStep; // 模拟的的频率
private int iterations; // 迭代越大,模拟约精确,但性能越低
private int[] iBobyX = {350,371,392,413,360,381,402,371,392,380};// 模拟关卡物体的X坐标,最后一个坐标为弹弓所在位置
private int[] iBodyY = {310,310,310,310,290,290,290,270,270,250};// 模拟关卡物体的Y坐标,最后一个坐标为弹弓所在位置
private int Bodynum = 0;
private ArrayList<Body> arrBody; //用来记录该世界当中存在的除边界外的刚体
private MyGraphicsView myView; // 我们自己定义的view,用来绘制出这个世界
private Handler mHandler;
private float density;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE); // 去title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);// 全屏

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
density = metric.density;//获得当前屏幕分辨率 320 – 480为1 480 -800为 1.5,我们要通过这个来计算绘画刚体的坐标

// 创建这个世界的坐标范围,并且设定上下限,这里应该是按世界的长度来算的,也就是说这个范围是足够大的,我们只能在这个范围内创建刚体
worldAABB = new AABB();
worldAABB.lowerBound.set(-100.0f, -100.0f);
worldAABB.upperBound.set(100.0f, 100.0f);
// end
arrBody = new ArrayList<Body>(); //用来记录世界当中所有的刚体
Vec2 gravity = new Vec2(0.0f, 10.0f); // 向量,用来标示当前世界的重力方向,第一个参数为水平方向,负数为做,正数为右。第二个参数表示垂直方向
boolean doSleep = false; // 标示 是否睡眠
world = new World(worldAABB, gravity, doSleep);// 创建世界
world.setContactListener(listener);//为世界增加监听
//*************************************************
//创建下边界以及创建关卡环境
createBorder(0, 320 * density, 480 * density, 10 * density);//创建下边界
initCheckPoint(); //创建关卡

//
myView = new MyGraphicsView(this);//MyGraphicsView这个类是我们用来展示的自定义View
myView.setBackgroundColor(Color.WHITE);
myView.density = density;
myView.setOnTouchListener(touchListener);
timeStep = 1.0f / 30f; // 定义频率
iterations = 10; // 定义迭代
setContentView(myView);
mHandler = new Handler();
mHandler.post(update); // android的知识,就不做标识了
}

private Runnable update = new Runnable() {
public void run() {
world.step(timeStep, iterations); // 开始模拟
myView.arrBody = arrBody;
myView.invalidate();
mHandler.postDelayed(update, (long) timeStep * 1000);
}
};

public void createBorder(float x, float y, float half_width,
float half_height) {
PolygonDef shape = new PolygonDef(); // 标识刚体的形状
shape.density = 0; // 设置刚体的密度,应为这个是底边界,所以密度设为0,相当于没有质量的物体不受力
shape.friction = 0.5f; // 摩擦力,学过物理吧….恩,就是这个意思…
shape.setAsBox(800 / RATE, half_height / RATE); // 设置刚体刚体的宽和高,要根据android坐标转换成世界当中的单位
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(x / RATE, y / RATE); // 定义刚体的位置
Body body1 = world.createBody(bodyDef); // 在世界中创建这个刚体
body1.createShape(shape); // 刚体形状
body1.setMassFromShapes(); // 计算质量
body1.m_userData = “border”;//为刚体增加名称,在碰撞检测当中我们可以根据这个名称来判断相撞的为哪两个物体 并进行相关的操作
}

public void initCheckPoint()
{
for (int i = 0; i <iBobyX.length; i++) {
PolygonDef shape = new PolygonDef();
shape.density = 5f;
shape.friction = 0.1f;
shape.restitution = 0.3f;
shape.setAsBox(10*density/RATE, 10*density/RATE);
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(iBobyX[i]*density / RATE, iBodyY[i]*density / RATE);
Body body = world.createBody(bodyDef);
body.createShape(shape);
body.setMassFromShapes();
body.setUserData(“Things”+i);
arrBody.add(body);
}//初始化关卡,这里的关卡随便定义了一个数组,不是很正规不要计较
}

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SketchBook 2014 基础入门视频教程

    SketchBook 2014 基础入门视频教程

    2017-05-01 11:00

  • 学习慕课网canvas倒计时实例笔记

    学习慕课网canvas倒计时实例笔记

    2017-04-30 14:01

  • 从一个画板demo学习canvas

    从一个画板demo学习canvas

    2017-04-30 13:00

  • canvas游戏开发学习之四:应用图像

    canvas游戏开发学习之四:应用图像

    2017-04-29 16:00

网友点评