摘要:
box2d内部已经为我们实现了碰撞检测!我们要做的是得到
监听碰撞
碰撞过滤
碰撞力度
来完成自己的处理
监听碰撞
b2ContactListener是box2d为我们提供的监听器,他为我们实现了四个方法
BeginContact(contact:b2Contact)--------刚刚碰撞开始的时候会触发这个函数
EndContact(contact:b2Contact) -------碰撞结束的时候会触发这个函数
PostSolve(contact:b2Contact, impulse:b2ContactImpulse)-----碰撞后会处理这个函数
PreSolve(contact:b2Contact, oldManifold:b2Manifold)--------- 碰撞前即将碰撞的时候 阅读全文
摘要:
Joint ! 是用来链接body和body直接的对象!
总共有8种joint,分别使用在不同的目的的链接中!
Mouse joint
Distance joint
Revolute joint
Prismatic joint
Pulley joint
Gear joint
Line joint
Weld joint 阅读全文
摘要:
之前都是球!一个充满了球的世界!悲催········
在box2d中为我们提供的shape就只有球和多边形!
shape是为我们的body提供形状的,虽然不能决定其外表如何!但已经奠定了其内在基础!再整容业真实的触碰范围也就那么大!至于外观!后面会说到!
box2d把body叫刚体,就是永不变形的身体!假设他可以承受所有外力而不变形!我们可以认为他是硬邦邦的石头!只有两个基础shape一个圆一个多边形!所以我们创建复杂的刚体的时候大多要基于多变形!他为我们提供了SetAsArray方法我们就可以有人一多顶点只需要按顺时针方向依次顺序排列好的数组传给进去!就可以了!
官方要求是这么传的!为什么必须这么传你懂得!他要不顺序乱交叉出来的不一定是什么形状!你自己可以再canvas上每画一根线fill依次!画个方别按顺序来!
所以在box2d的世界只能够支持凸形状不支持凹形状!为什么?和上面一样!他总得closePath才能fill,所以总是凸的!
通常我们需要画复杂的形状或者凹形状的办法是用多个凸的形状是有joint连接起来!组成一个(看似一个)shape 阅读全文
摘要:
上一次我们创建了World和body并且看到了!之后的效果!现在我们来添加鼠标交互!
在box2d中没有直接提供对鼠标操作的事件的监听!
在box2d中为我们提供了一个mouseJoint来和其他body进行鼠标交互,我们都知道Joint是用来连接body与body的所以在我们的交互中还会出现另外一个body一个是我们点击的body而另一个则是我们系统给我们默认提供的一个body,world.GetGroundBody();就可以得到!
鼠标交互主要函数必须在什么mousedown啊mouseup之类的方法里面!
那既然要叫互,当我们点下的时候我么就必须得拿到点的是谁!
所以我们先从mouseDown看,当然记得给canvas注册监听 阅读全文
摘要:
box2d是一个开源的物理引擎,关于更多的介绍可以去官方有手册!讲一些这个引擎都包含些什么、及怎么使用,详情请参阅http://box2d.org/
box2d是由由一个World或者多个World,当然很多情况下一个就够了!而World中包含了很多body以及body之间的joint,而每一个body又包含body的fixture,
fixture:里面包含一些body的特性如:friction (摩擦),restitution(回弹力),density(密度),形状(shape)等等牛顿世界相关的属性,通常fixture是由 body.CreateFixture(fixDef);创建的。
body :我们通过world.CreateBody(bodyDef)创建body,而一个bodyDef也就是body的定义里面包含了这个body的坐标以及类型等信息,然后world根据bodyDef创建相应的body
另外bodyDef或者fixtrueDef是可以复用的!我们每一次CreateBody是把bodyDef复制一份然后创建并不是引用!所以当我们创建之后修改bodyDef并 阅读全文