cocos creator 碰撞检测 拾取道具小案列

前言:creator有碰撞检测系统 +物理碰撞系统,这个是两个独立的模块;

demo:

知识点:

代码开启碰撞检测系统(默认是关闭碰撞检测),开启和关闭碰撞检测的调试:

        var manager = cc.director.getCollisionManager(); // 获取碰撞检测管理器
        manager.enabled = true; // 开启碰撞

        manager.enabledDebugDraw = true; // 允许绘制碰撞的区域

碰撞检测函数响应,发生碰撞检测的节点,会调用这个节点上所有组件的统一的三个接口:
     onCollisionEnter: function (other, self) // 开始
     onCollisionStay: function (other, self)  // 持续
     onCollisionExit: function (other, self)    // 结束
     其中other是与这个节点碰撞的节点的碰撞器组件
     其中self是自身节点的碰撞器组件   

     是碰撞器组件,不是节点-->碰撞器组件.node

1.首先给Canvas 画布绑定 enable_collider 脚本

代码如下

cc.Class({
    extends: cc.Component,

    properties: {
        is_enbale: true,
        is_debug: true,
    },

    // use this for initialization
    onLoad: function () {
      
    },

    start:function(){

        if(this.is_enbale==true){
        var manager = cc.director.getCollisionManager(); // 获取碰撞管理器
        manager.enabled = true; // 开启碰撞
        manager.enabledDebugDraw = true; // 允许绘制碰撞的区域
        }

    },

    // called every frame
    update: function (dt) {

    },
});

给道具绑定的脚本如下


cc.Class({
    extends: cc.Component,

    properties: {
       prop_type: 1,
    },

   
    // onLoad () {},

    start () {
       
    },


    onCollisionEnter: function (other, self) {
        console.log("other.name = ", other.node.name, other.node.group, other.node.groupIndex);
        if (other.node.groupIndex === 1) { // 表示是PLAYER类型撞到了,道具拾取成功
            this.node.removeFromParent();//消失
        }
    },

    // 碰撞持续
    onCollisionStay: function (other, self) {

    },
    // end 

    // 碰撞结束
    onCollisionExit: function (other, self) {

    },

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

给player绑定的脚本如下 

cc.Class({
    extends: cc.Component,

    properties: {
        // foo: {
        //    default: null,      // The default value will be used only when the component attaching
        //                           to a node for the first time
        //    url: cc.Texture2D,  // optional, default is typeof default
        //    serializable: true, // optional, default is true
        //    visible: true,      // optional, default is true
        //    displayName: 'Foo', // optional
        //    readonly: false,    // optional, default is false
        // },
        // ...
    },

    // use this for initialization
    onLoad: function () {

    },

    // other是道具的碰撞器组件
    // self 是自己节点的碰撞器组件 
    // 碰撞器是一个组件,所以我们可以通过组件 -->节点
    // 碰撞开始
    onCollisionEnter: function (other, self) {
        console.log("other.name = ", other.node.name, other.node.group, other.node.groupIndex);
        if (other.node.groupIndex === 2) { // 与道具相撞
            var prop = other.node.getComponent("prop");
            console.log("我们捡到了道具:", prop.prop_type);
        }
    },

    // 碰撞持续
    onCollisionStay: function (other, self) {

    },
    // end 

    // 碰撞结束
    onCollisionExit: function (other, self) {

    },
    // called every frame, uncomment this function to activate update callback
    // update: function (dt) {

    // },
});

再添加计时器和得分就完美了






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值