这两天学习Cocos的碰撞与物理系统,从迷茫到初步认识。特在此写下我的一些初步认识。
碰撞系统
要为物体添加碰撞请按如下顺序添加:
1.为物体添加碰撞组件,碰撞组件有分为矩形、圆形、跟多边形,按需添加吧
2.在项目->项目设置->分组管理中进行添加分组(如果需要的话)跟设置允许产生碰撞的分组,如下图:
car2分组会与car分组产生碰撞,并且car2分组与car2分组也会产生碰撞,而car分组跟car分组不会产生碰撞。
3.为物体分组。
4.在脚本中开始碰撞检测(默认为关闭)
cc.director.getCollisionManager().enabled = true;
这样物体之间就可以产生碰撞了。但,我知道光产生碰撞还不够,我们一般还需要能够获取/设置一些碰撞后的信息。此时可以写一个脚本,在脚本内实现以下的函数进行操作
/**
* 当碰撞产生后,碰撞结束前的情况下,每次计算碰撞结果后调用
* @param {Collider} other 产生碰撞的另一个碰撞组件
* @param {Collider} self 产生碰撞的自身的碰撞组件
*/
onCollisionStay(other,self){}
/**
* 当碰撞结束后调用
* @param {Collider} other 产生碰撞的另一个碰撞组件
* @param {Collider} self 产生碰撞的自身的碰撞组件
*/
onCollisionExit(other,self){}
物理系统
物理系统跟碰撞系统有点相像,都是添加组件,开启系统。也同样可以写个脚本控制各种物理量。
但有一个坑
当刚体挂载到一个节点中,如果你想直接通过操控父节点来移动这个刚体,抱歉!这是不行的。
你需要:
1.移动或者旋转父节点
2.在每次父节点节点信息更改时手动修改刚体的信息或者调用
/**
*同步位置
*/
syncPosition(true);
例:
this.node.getComponent(cc.RigidBody).syncPosition(true);
/**
*同步旋转角度
*/
syncRotation(true);
例:
this.node.getComponent(cc.RigidBody).syncRotation(true);
//要注意的是如果要实现一些平移之类的动作的话,需要每次(每帧)父节点更改时调用对应的函数