一、物理世界与手机屏幕坐标系之间的关系
手机屏幕绘制图形时,一般默认以左上角作为坐标原点,而在Box2d的物理世界中,一个新的Body(物体)等被创建出来之后,默认以其质心(差不多就是中心点)做为原点,
注意:还要进行“米”与像素的转换。
二、 BOX2D的常用概念
a)世界(World) -- 世界就是一个环境,所有物理运算都在这个里面运行。
b)形状定义(ShapeDef) -- 定义对象的样子,用来确定碰撞。
c)刚体定义(BodyDef)-- 设定刚体的初始具体,把定义好的形状加到刚体上。
d)刚体(Body) -- 物理引擎里面的东西(对象),可以受力的作用进行当前位置的变化旋转等。
三、BOX2D理解关键点----是模拟的物理世界,而程序需要做到把模拟的物体运动轨迹转为需要表现的屏幕参数然后再画在屏幕上。
world.step(timeStep, iterations);//开始模拟
//屏幕绘制的图形与Box2D无关!Box2D引擎只负责提供物理世界的模拟数据。
//如果想让屏幕中显示一个附有重力的图形,那么则需要一个重力物体运动轨迹的数据,
//而Box2D提供的Body正是一个拥有重力的物体。
//通过将Body在模拟的物理世界中的运动数据传给绘制的图形,
//绘制的图形就会沿着提供的运动轨迹来运行,也就相当于图形拥有了重力。
Vec2 position = body.getPosition();
Vec2 position1 = body2.getPosition();
Vec2 position2 = body3.getPosition();
//注意下面这里是将物体运动轨迹的数据转为屏幕像素坐标,从而画在屏幕上
//此方法获取的是物体的中心点坐标,所以还需要将其X坐标减去物体的宽的一半,
//Y坐标减去物体的高的一半,得到其左上角坐标。
//当然如果图形是以中心点进行绘制的话,就可以获取中心点直接将坐标传递给绘制的图形即可。
this.x = position.x*RATE;
his.y = position.y*RATE;
this.x1 = position1.x*RATE;
this.y1 = position1.y*RATE;
this.x2=position2.x*RATE;
this.y2=position2.y*RATE;
//这里使用转换后的坐标来进行画图
draw();
\
几个快递 请寄: 北京市顺义区顺沙路小中河CIAO!DAFANFAN物流中心 电话15110100050 收件人:亭子 邮编:101300