creator系统自带了一个碰撞检测系统,不过好像只能检测组件之间的碰撞?我最近在写一个飞机游戏,里面的子弹使用的是自定义的cc.class类,继承的是节点
var bullet = cc.Class({
extends: cc.Node
})
类似这样的,请问这样创建出来的对象能使用自带的碰撞检测系统吗?
添加碰撞组件就可以了
不行啊,好像必须在组件下才能得到碰撞检测的回调函数,如果是两个对象都是通过代码创建的,就不能检测到,至少有一方得是组件对象才行
任何组件都是可以通过cc.Node对象的addComponent方法挂载到节点上的
看代码吧还是,这是我的子弹类
var bulletBase = cc.Class({
extends: cc.Node,
properties: {
speed : cc.v2(0, 1) //子弹速度
},
ctor: function() {
this.sprite = this.addComponent(cc.Sprite);
this.sprite.spriteFrame = loadRes.getSpriteAtlasFrameRes("role/bullet_lv", "1_1");
this.spriteSize = this.getContentSize();
this.group = "playerBullet";
//碰撞检测开始
var manager = cc.director.getCollisionManager();
manager.enabled = true;
var box = this.addComponent(cc.BoxCollider);
},
//替换精灵
replaceSpriteFrame: function(spriteFrameName) {
this.sprite.spriteFrame = loadRes.getSpriteAtlasFrameRes("role/bullet_lv", spriteFrameName);
this.spriteSize = this.getContentSize();
},
//发射子弹
fireBullet: function() {
this._sgNode.schedule(this.bulletMove.bind(this), 0.02);
},
//子弹移动
bulletMove: function() {
var position = cc.pAdd(this.getPosition(), this.speed);
if (position.y >= cc.winSize.height * 0.5 + this.spriteSize.height * 0.5) {
this.destory();
}
else {
this.setPosition(position);
}
},
//销毁子弹
destory: function() {
this._sgNode.unscheduleAllCallbacks();
this.removeFromParent();
},
onCollisionEnter: function(other, self) {
cc.log(other);
cc.log(self);
cc.log("pengzhuang");
},
});
module.exports = bulletBase;
这样可以检测吗,我在画布上拖拽了一个精灵组件enemy,分组为enemy,然后playerbullet和enemy这两个分组是检测碰撞的,在enemy组件下添加了一个脚本组件,在这个脚本组件里是可以检测到和子弹的碰撞,子弹类里应该怎么操作才能检测碰撞
同时我也在尝试将子弹类改成prefab类型
现在你的代码不能检测碰撞吗?
子弹类,就是我上面贴的代码不可以,外面拖拽的精灵组件下的js脚本里面可以检测到
你的子弹类是怎么创建对象的?
new出来的
var bulletBase = require(“bulletBase”);
var bullet = new bulletBase();
this.node.group = “playerBullet”; 这样吧
我继承的cc.Node,不用加.node,而且我也说了,我这样已经实现碰撞,在敌人那里可以检测到碰撞,只是子弹类检测不到,子弹继承的cc.Node,敌人继承的cc.Component,可能问题在这里
不行,事件只会分发到 component 中,你可以挂一个 bullet component 来接收
果然是这样吗,谢谢了,大概猜到这里的问题了
请问下 这样实例化子弹后 ,怎么添加到节点上,这个bullet 应该是一个ccclass类型不是cc.Node类型吧 怎么add进去
哇…好久没上了,没想到都好几个月了还有人问,是这样,cc.Class是个api,是用来声明类的,属于cocos creator里面的方法,创建的同时可以选择继承,而编辑器里面右键创建的javaScript里面默认是继承组件类的:extends: cc.Component,而我的子弹是继承的节点类:extends: cc.Node,这样new出来的对象是节点类型的,可以直接add上去的