21.物理引擎基本配置

1. 开启物理引擎

编写脚本来开启物理引擎;
将这个脚本挂载到场景的根节点;
编写调试接口决定是否打开物理引擎调试;
cc.director.getPhysicsManager().enabled = true;  // 打开物理引擎
     cc.director.getPhysicsManager().debugDrawFlags 调试标志;
    var Bits = cc.PhysicsManager.DrawBits;
    cc.director.getPhysicsManager().debugDrawFlags = Bits.e_jointBit | Bits.e_shapeBit;
cc.PhysicsManager:
      enable: 开启   debugDrawFlags: 调试标志,   gravity: 重力加速度,二维向量

 

2. 重力加速度

物理引擎会有一个重力加速度,来模拟物理环境,你可以可以把重力加速度改成0,不受重力影响;
修改重力加速度:
    cc.director.getPhysicsManager().gravity = cc.v2(0, -320);

 

3. 物理刚体

刚体:形状不会改变
刚体分为静态,动态刚体, 不受力的刚体(Kinematic,不受作用力的影响);
刚体是受到物理作用的物体,由刚体带着节点移动;
刚体组件cc.RigidBoy:
      enabledContactListener: 是否开启碰撞事件的监听;
      bullet: 是否为子弹属性,防止高速穿越;
      allowSleep: 是否允许进入休眠状态,一段时间后如果物体没有任何状态改变会进入休眠状态;
      gravityScale: 该物体收重力的缩放;
      linearDamping: 线性阻尼,衰减线性速度;
      angularDamping: 角速度阻尼,衰减角速度;
      linearVelocity: 刚体的线性速度;
      angularVelocity: 刚体的角速度;
      fixedRotation: 是否固定不旋转;
      awake: 是否立刻唤醒此刚体;
      active: 是否激活这个刚体,如果不激活,那么刚体不会参与碰撞;

 

4. 刚体碰撞器

光有刚体还不够,还要为每个刚体添加一个物理性状;
物理形状的类型:
    矩形物理碰撞器;
    圆形物理碰撞器;
    多边形物理碰撞器;
     链条碰撞器:  PhysicsChainCollider;
碰撞器的物理参数:
    Tag: 碰撞器的标记,区别一个节点上多个不同的碰撞器;
    Density: 相状的密度;
    Sensor: 是否为一个碰撞感应器;
    Friction: 摩擦系数;
    Restitution: 弹性系数[0, 1], 0没有弹性, 1完全弹性碰撞;
    Editing: 可以编辑碰撞器的形状;

一定要加物理碰撞器,而不是碰撞系统的碰撞器,非常容易出错误

 

代码示例 enbale_phy.js 挂在canvans

// Learn cc.Class:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/class.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/class.html
// Learn Attribute:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] https://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html

cc.Class({
    extends: cc.Component,

    properties: {
        // foo: {
        //     // ATTRIBUTES:
        //     default: null,        // The default value will be used only when the component attaching
        //                           // to a node for the first time
        //     type: cc.SpriteFrame, // optional, default is typeof default
        //     serializable: true,   // optional, default is true
        // },
        // bar: {
        //     get () {
        //         return this._bar;
        //     },
        //     set (value) {
        //         this._bar = value;
        //     }
        // },

        is_debug: false, //是否显示调试信息

        //重力加速度
        gravity: cc.v2(0, -320), //系统默认

    },

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        
        //游戏引擎总控制  导演
        cc.director.getPhysicsManager().enabled = true; //开启物理引擎
        
        //独立的形状,打开一个调试区域,游戏图像,逻辑区域
        //开始调试模式
        if(this.is_debug) {
            var Bits = cc.PhysicsManager.DrawBits; //显示的类型
            cc.director.getPhysicsManager().debugDrawFlags = Bits.e_jointBit | Bits.e_shapeBit;
        }else {
            cc.director.getPhysicsManager().debugDrawFlags = 0;
        }

        //重力加速度配置
        cc.director.getPhysicsManager().gravity = this.gravity;

    },

    start () {

    },

    // update (dt) {},
});

工程截图: 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值