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 } }, });
cocos Creator碰撞检测
最新推荐文章于 2024-08-22 19:22:59 发布