微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cocos2d-js____对象池的使用

var MySprite = cc.Sprite.extend({

_hp: 0,

_sp: 0,

_mp: 0,

ctor: function (f1,f2,f3) {

this._super(s_grossini);

this.initData(f1,f3);

},

initData: function (f1,f3) {

this._hp = f1;

this._mp = f2;

this._sp = f3;

},

//当加入对象池时,调用

unuse: function () {

this._hp = 0;

this._mp = 0;

this._sp = 0;

this.retain();//if in jsb

this.setVisible(false);

this.removeFromParent(true);

},

//当调用对象池时,调用

reuse: function (f1,f3) {

this.initData(f1,f3);

this.setVisible(true);

}

});



addSpriteByPool: function () {

//数组,方便移除精灵

this.datalist2 = [];

//先创建一些精灵,保存在对象池中,方便调用

for (var i = 0; i < 150; i++) {

var sp =new MySprite(f1,f3);

this.addChild(sp);

//将对象放入对象——1

cc.pool.putInPool(sp);

}

//提示

this.timeStart("use Pool");

//开始创建,从对象池中调用,当对象池中的对象不够时,独立创建。

for (var i = 0; i < 151; i++) {

//从对象池中调用,创建

var sp =null;

if (cc.pool.hasObject(MySprite)){//判断MySprite类型的对象是否存在,且是否存在实例对象

cc.log("调用的是保存在对象池中MySprite类型的对象实例,可以修改属性");

sp = cc.pool.getFromPool(MySprite,3,4+i,5);

}else {

cc.log("*********对象池中MySprite类型的对象实例已经被用完,需要重新创建!!!*******");

sp = new MySprite(f1,f3);

}

this.datalist2.push(sp);

this.addChild(sp,100);


//改变精灵的位置

sp.x = 50 + 8 * i;

}

//提示

this.setPoolLabel(this.timeEnd("use Pool"));

//添加一个定时器,移除对象

this.schedule(function () {

for (var i = 0; i <this.datalist2.length; i++) {

this.datalist2[i].removeFromParent(true);

}

this.datalist2 = [];

//移除所有的池中的对象,并重置

cc.pool.drainAllPools();

},1,0.1);

},

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐