Cocos2d-X Box2D中部分方法的重点理解

网友投稿 324 2022-11-07

Cocos2d-X Box2D中部分方法的重点理解

1、碰撞检测中的:     /*      float force=impulse->normalImpulses[0];的理解: (1)原理透析:     两个物体产生碰撞的时候,除了检测是否碰撞了,很多时候我们需要知道碰撞强度有多大,比如愤怒的小鸟,要根据碰撞的强度决定是否消去障碍物。这一个教程解释如何获取碰撞强度。     碰撞的强度在物理上用冲量(Impluse)表示,在经典力学里,冲量等于物体动量的变化。     冲量公式     I = Ft (单位 N*s)     如果有恒力F,作用在质量为m、静止的物体上,经过时间t,会产生什么效果呢?由Ft=mat=mv看出,力与时间的乘积Ft越大,静止的物体获得的速度v就越大;Ft越小,物体的速度就越小。     冲量是矢量     冲量的方向由力的方向确定。如果在力的作用时间内,力的方向保持不变,则力的方向就是冲量的方向。     冲量与动量的关系     运动物体的质量和速度的乘积叫动量,p=mv,国际单位是千克米每秒。     在恒力F作用下,质量为m的物体在时间t内,速度由v变化到v′。根据牛顿第二定律,有F=ma式中F为物体所受外力的合力。等式两边同乘时间t,Ft=mat=mv′-mv,因此I=p′-p     总结说,质量一定的物体碰撞之后获取的速度可以用来衡量碰撞强度,其取决于碰撞力与时间的乘积,及冲量。因此box2D中,我们要判断碰撞强度,需要获取碰撞时的冲量,而box2D已经为你提供了方便的获取方式。具体获取方法如下:    获取碰撞冲量,这时需要覆盖另外一个方法PostSolve(contact:b2Contact, impulse:b2ContactImpulse),我们看到此方法有两个参数 (2)参数详解: b2contact:碰撞对象,可以获取两个碰撞物体 impluse:碰撞冲量,及我们所需要的衡量碰撞强度的参数 impluse冲量是一个数组,具有两个元素,normalImpulses和tangentImpulses,都是矢量Vector类型     normalImpulses :碰撞普通合力产生的冲量     tangentImpulses :模拟切线方向摩擦力所产生的冲量(实际trace时总是0,可能是我的刚体原因)      */ 例如: //此方法由系统调用 void MyContactListener::PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) {     CCLog("PostSolve!");     float force=impulse->normalImpulses[0];//表示冲量     if(force>2)     {         //得到物体A,B的数据         PhysicsSprite *spriteA=(PhysicsSprite *)contact->GetFixtureA()->GetBody()->GetUserData();         PhysicsSprite *spriteB=(PhysicsSprite *)contact->GetFixtureB()->GetBody()->GetUserData();         if(spriteA && spriteB)         {             spriteA->hp--;             spriteB->hp--;         }     } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:USB接口为i.MX6处理器下载固件无法启动的解决方法
下一篇:Cocos2d-X 愤怒的小鸟实现----加载页面(一)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~