Cocos的碰撞系统设计者堪称天才,我只花了两个小时就找到了问题所在。
碰撞组件中的Collider并不具备物理特性,意思是两个带Collider组件的物体发生碰撞,并不会有任何物理上的反馈,这和刚体没有任何关系,但是,碰撞事件的触发还只能用这几个Collider
下面这几个Collider才具有物理特性,在添加的时候会自动加上RigidBody(这点还行,可圈可点)
综上,如果你想在产生物理效果的同时也分发碰撞函数,就必须把Collider,PhysicsCollider,RigidBody这三个组件全部加上
这还不算完,你需要在代码里开启全局的碰撞系统
cc.director.getCollisionManager().enabled = true;
cc.director.getPhysicsManager().enabled = true;
嗯,考虑得非常全面,生怕初学者不小心开启了碰撞检测,超级贴心,给你个么么哒?
吐槽了那么多,给点干货吧
碰撞系统回调函数
- 碰撞产生时 onCollisionEnter: function (other, self)
- 碰撞保持时 onCollisionStay: function (other, self)
- 碰撞结束时onCollisionExit: function (other, self)
other是产生碰撞的另一个碰撞组件,self是产生碰撞的自身的碰撞组件。
Collider component 的 enabled 是单个对象的碰撞检测是否开启
node.getComponent(cc.CircleCollider).enabled = false
发生物理碰撞的双方RigidBody的Type属性必须有一个Static一个Dynamic(这样可以确保不互相穿过)