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); }, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |