最近的飞机大战项目中,涉及到了玩家和敌人发射子弹的问题,我想着是写一个子弹发射器的类,里面负责添加子弹的工作,然后某一个敌人或玩家需要发射子弹的功能就在玩家或敌人类里添加一个子弹的control,这样复用起来比较方便,敌人的子弹发射类型也可以丰富起来,目前就差了一部,就是我玩家或敌人在死亡时会先播放一个动画,所以在播动画之前我需要停掉这个子弹发射器,这里出现了问题,不能正常停止,为了以后的扩展我不太想使用unscheduleAllCallbacks这个方法去停止,想让各位大神看一下怎么解决
代码如下:
//子弹发射器基类
var bulletControlBase = cc.Class({
ctor: function() {
//代理者
this.delegate = null;
//类型
this.type = null;
//子弹类型
this.bulletType = null;
//子弹所属
this.bulletGroup = null;
//添加位置
this.bulletPosition = cc.v2(0, 0);
//发射间隔
this.internal = null;
//重复次数
this.repeat = null;
//发射延时
this.delay = null;
},
//设置代理者
setDelegate: function(delegate) {
this.delegate = delegate;
},
//开启发射器(有需要重写)
fireBullet: function() {
var self = this;
this.delegate.schedule(function(){
//创建子弹
var bullet = createBullet(self.delegate.bullet, self.bulletType);
bullet.group = self.bulletGroup; //分组
//位置
bullet.setPosition(cc.pAdd(self.delegate.node.getPosition(), self.bulletPosition));
self.delegate.node.parent.addChild(bullet);
}, this.internal, this.repeat, this.delay);
},
//关闭发射器(有需要重写)
stopBulletControl: function() {
}
});
module.exports = bulletControlBase;
这是玩家的子弹发射器
var bulletControlBase = require(“bulletControlBase”);
//玩家发射器1
var playerBulletControl1 = cc.Class({
extends: bulletControlBase,
ctor: function() {
//类型
this.type = bulletControlType.player1;
//子弹类型
this.bulletType = bulletType.playerBullet1;
//子弹所属
this.bulletGroup = “playerBullet”;
//添加位置
this.bulletPosition = cc.v2(0, 20);
//发射间隔
this.internal = 0.2;
},
//创建子弹
createPlayerBullet: function() {
//创建子弹
var bullet = createBullet(this.delegate.bullet, this.bulletType);
bullet.group = this.bulletGroup; //分组
//位置
bullet.setPosition(cc.pAdd(this.delegate.node.getPosition(), this.bulletPosition));
this.delegate.node.parent.addChild(bullet);
},
//开启发射器(有需要重写)
fireBullet: function() {
var self = this;
this.delegate.schedule(self.createPlayerBullet.bind(self), self.internal);
},
//关闭发射器(有需要重写)
stopBulletControl: function() {
var self = this;
this.delegate.unschedule(self.createPlayerBullet.bind(self));
}
});
module.exports = playerBulletControl1;
这里面有开启和关闭两个方法,开启可以正常使用
比如玩家类里:
//开启子弹发射器
startBulletController: function() {
//玩家子弹发射器
this.bulletControl = createBulletControl(1);
this.bulletControl.setDelegate(this);
this.bulletControl.fireBullet();
},
关闭无法使用,stopBulletControl这个方法被调用了,但是unschedul没有起作用。另外在模拟器里玩家和敌人的发射器都可以正常使用,但是在网页上运行敌人子弹没有正常发射出来,也不知道是什么原因。