物理引擎默认是关闭状态以节省资源开销。开启方法和之前的普通碰撞类似:cc.directorgetPhysicsManager().enabled = true但有一个区别,物理引擎的开启必须放在onLoad函数内运行,否则不生效。
开启物理引擎后,游戏运行,会发现添加了刚体的节点会受到重力影响向下自由落体。当然刚才看到刚体组件还有属性面板,这些属性就是对刚体进行物理干预的属性:
- Enabled Contact Listener–开启物理碰撞检测,这和物理碰撞有关
- Bullet–防止高速移动的物体穿过墙面或地面等刚体
Type–刚体类型:static静态刚体、kinematic不受外力影响、Dynamic动态刚体、Animated通过设置线速度
和角速度驱动的刚体 - Allow Sleep–允许刚体静止不动时进入睡眠状态,降低CPU占用率
- Gravity Scale–重力倍数,1为1倍重力
- Linear Damping–线性速度衰减系数、用于衰减刚体的线性速度,衰减系数可以大于1,当衰减系数比较大
时,衰减的效果会变得比较敏感 - Angular Damping–角速度衰减系数
- Linear Velocity–线性初速度
- Angular Velocity–角初速度
- Fixed Rotation–禁止物体旋转
- Awake On Load–是否在初始化时唤醒此刚体
除了直接在属性面板上设置一些刚体的物理量外,还可以通过代码的方式设置更多的物理量:
- applyForce(force: cc.Vec2, point: cc.Vec2,wake: boolean)给刚体施加一个力,第一个参数是力在x、y轴上的大小分量,第二个参数是里的作用点,第三个参数是是否唤醒刚体。如果施加的力作用点不在质心上,还会对刚体产生旋转扭矩。
- applyForceToCenter(force: cc.Vec2,wake: boolean)施加一个力到刚体的质心上
- appylTorque(torque: number, wake: boolean)施加一个扭力
- applyLinearlmpulse(impulse: cc.Vec2, point: cc.Vec2, wake: boolean)施加冲量
- appplyAngularlmpulse(impulse: number wake: boolean)施加角速度冲量