cocos Creator碰撞检测

  properties: {
        directionX:0,   //根据组件上设置的数字来进行方向移动
        directionY:0,
    },

    // use this for initialization
    onLoad: function () {
        var manager = cc.director.getCollisionManager();
        manager.enabled = true;
        manager.enabledDebugDraw = true;
    },
    /**
     * 当碰撞产生的时候调用
     * @param  {Collider} other 产生碰撞的另一个碰撞组件
     * @param  {Collider} self  产生碰撞的自身的碰撞组件
     */
    onCollisionEnter: function (other, self) {
        // 碰撞系统会计算出碰撞组件在世界坐标系下的相关的值,并放到 world 这个属性里面
        var world = self.world;
        // 碰撞组件的 aabb 碰撞框
        var aabb = world.aabb;

        // 上一次计算的碰撞组件的 aabb 碰撞框
        var preAabb = world.preAabb;
        var r = world.radius;
        var point = cc.p(preAabb.x,preAabb.y)
        //cc.log(aabb.x ,aabb.y,preAabb.x,preAabb.y)
        var offsetX = aabb.x - preAabb.x
        var offsetY = aabb.y - preAabb.y
        if(offsetX !=0)offsetX = offsetX/Math.abs(offsetX) * 5   //碰撞时反弹
        if(offsetY !=0)offsetY = offsetY/Math.abs(offsetY) * 5
        point = cc.pAdd(cc.p(preAabb.x,preAabb.y),cc.p(r - offsetX, r - offsetY))

        point = this.node.parent.convertToNodeSpaceAR(point)
        //point = this.sprite.parent.convertToNodeSpaceAR(point)
        this.node.setPosition(point)
        //this.sprite.setPosition(point)

        // 碰撞框的世界矩阵
        var t = world.transform;

        // 以下属性为圆形碰撞组件特有属性
        var r = world.radius;
        var p = world.position;

        // 以下属性为 矩形 和 多边形 碰撞组件特有属性
        var ps = world.points;
    },
    /**
     * 当碰撞产生后,碰撞结束前的情况下,每次计算碰撞结果后调用
     * @param  {Collider} other 产生碰撞的另一个碰撞组件
     * @param  {Collider} self  产生碰撞的自身的碰撞组件
     */
    onCollisionStay: function (other, self) {
        //this.node.x -= 10
        //this.sprite.x += 10
    },
    /**
     * 当碰撞结束后调用
     * @param  {Collider} other 产生碰撞的另一个碰撞组件
     * @param  {Collider} self  产生碰撞的自身的碰撞组件
     */
    onCollisionExit: function (other, self) {

    },
    // called every frame, uncomment this function to activate update callback
     update: function (dt) {
         if(this.directionX !=0){
             this.directionX = this.directionX/Math.abs(this.directionX)
             this.node.x +=this.directionX * 100 * dt
         }
         if(this.directionY !=0){
             this.directionY = this.directionY/Math.abs(this.directionY)
             this.node.y +=this.directionY * 100 * dt
         }
     },
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值