引言
在Cocos Creator游戏开发的过程中,经常需要做物体的碰撞、反弹等物理判断和检测处理。
一、开启物理引擎
1: 编写脚本来开启物理引擎;
2: 将这个脚本挂载到场景的根节点;
3: 编写调试接口决定是否打开物理引擎调试;
4: cc.director.getPhysicsManager().enabled = true; // 打开物理引擎
1. `cc.director.getPhysicsManager().debugDrawFlags 调试标志;`
2. `varBits= cc.PhysicsManager.DrawBits;`
3. `cc.director.getPhysicsManager().debugDrawFlags = Bits.e_jointBit | Bits.e_shapeBit;`
5: cc.PhysicsManager:
1. `enable: 开启 debugDrawFlags: 调试标志, gravity: 重力加速度,二维向量`
1.书写组件类
1. `const {ccclass, property} = cc._decorator;`
2. `@ccclass`
3. `export default class EnablePhy extends cc.Component {`
4. ` @property({tooltip:"是否开启物理引擎"})`
5. ` enablePhy : boolean = false;`
6. ` @property({tooltip:"是否调试模式"})`
7. ` isDebug : boolean = false;`
8. ` @property({tooltip:"重力加速度"})`
9. `gravity : cc.Vec2 = cc.v2(0, -320);`
11. `private phyManager : cc.PhysicsManager;`
12. ` onLoad () {`
13. ` if(this.enablePhy){`
14. ` this.phyManager = cc.director.getPhysicsManager();`
15. ` this.phyManager.enabled = this.enablePhy;`
16. ` if(this.isDebug){`
17. ` this.phyManager.debugDrawFlags = cc.PhysicsManager.DrawBits.e_shapeBit || cc.PhysicsManager.DrawBits.e_jointBit;`
18. ` }else{`
19. ` this.phyManager.debugDrawFlags = 0;`
20. ` }`
21. ` //console.log("系统默认重力加速度:",this.phyManager.gravity);`
22. ` this.phyManager.gravity = this.gravity;`
23. ` }else{`
24. ` this.phyManager.enabled = false;`
25. ` }`
26. ` }`
27. `}`
2.将组件类挂载到根节点上
二、重力加速度
1: 物理引擎会有一个重力加速度,来模拟物理环境,你可以可以把重力加速度改成0,不受重力影响;
2: 修改重力加速度:
1. `cc.director.getPhysicsManager().gravity = cc.v2(0, -320);`
三、物理刚体cc.RigidBody
1: 刚体:形状不会改变
2: 刚体分为静态,动态刚体, 不受力的刚体(Kinematic,不受作用力的影响);
3: 刚体是受到物理作用的物体,由刚体带着节点移动;
4: 刚体组件cc.RigidBoy:
1. `enabledContactListener: 是否开启碰撞事件的监听;`
2. `bullet: 是否为子弹属性,防止高速穿越;`
3. `allowSleep: 是否允许进入休眠状态,一段时间后如果物体没有任何状态改变会进入休眠状态;`
4. `gravityScale: 该物体收重力的缩放;`
5. `linearDamping: 线性阻尼,衰减线性速度;`
6. `angularDamping: 角速度阻尼,衰减角速度;`
7. `linearVelocity: 刚体的线性速度;`
8. `angularVelocity: 刚体的角速度;`
9. `fixedRotation: 是否固定不旋转;`
10. `awake: 是否立刻唤醒此刚体;`
11. `active: 是否激活这个刚体,如果不激活,那么刚体不会参与碰撞;`
四、刚体碰撞器cc.Collider
1: 光有刚体还不够,还要为每个刚体添加一个物理性状;
2: 物理形状的类型:
1. `矩形物理碰撞器;`
2. `圆形物理碰撞器;`
3. `多边形物理碰撞器;`
4. `链条碰撞器: PhysicsChainCollider;`
3: 碰撞器的物理参数:
1. `Tag: 碰撞器的标记,区别一个节点上多个不同的碰撞器;`
2. `Density: 形状的密度;`
3. `Sensor: 是否为一个碰撞感应器;`
4. `Friction: 摩擦系数;`
5. `Restitution: 弹性系数[0, 1], 0没有弹性, 1完全弹性碰撞;`
6. `Editing: 可以编辑碰撞器的形状;`
4: 一定要加物理碰撞器,而不是碰撞系统的碰撞器,非常容易出错误
更多cocos教学视频:
Cocoswww.bycwedu.com/promotion_channels/2146264125?cate=710180854