本章節學習到了如何使用粒子系統,但是在開發的項目中,我們不會經常使用到,大多時候回將粒子轉成幀動畫進行播放,降低IO消耗,從而節約開發的成本。直接呈上代碼:
var HelloWorldLayer = cc.Layer.extend({
sprite:null,
ctor:function () {
this._super();
var size = cc.winSize;
var particle = ["爆炸粒子","火焰粒子","煙花粒子",
"花粒子","星系粒子","流星粒子",
"漩渦粒子","雪粒子","煙粒子",
"太陽粒子","雨粒子"];
var items = [];
for(var i=0;i<particle.length;i++){
var item = new cc.MenuItemFont(particle[i],this.callback,this);
item.setTag(i*10);
item.setPosition(size.width/2-100,size.height/2-30*i);
items.push(item);
}
var menu = new cc.Menu(items);
menu.setPosition(0,size.height/2-70);
this.addChild(menu);
return true;
},
callback: function (obj) {
var particle;
var size = cc.winSize;
switch(obj.tag){
case 0:
this.removeChildByTag(100);
particle = new cc.ParticleExplosion();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 10:
this.removeChildByTag(100);
particle = new cc.ParticleFire();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 20:
this.removeChildByTag(100);
particle = new cc.ParticleFireworks();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 30:
this.removeChildByTag(100);
particle = new cc.ParticleFlower();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 40:
this.removeChildByTag(100);
particle = new cc.ParticleGalaxy();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 50:
this.removeChildByTag(100);
particle = new cc.ParticleMeteor();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 60:
this.removeChildByTag(100);
particle = new cc.ParticleSpiral();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 70:
this.removeChildByTag(100);
particle = new cc.ParticleSnow();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 80:
this.removeChildByTag(100);
particle = new cc.ParticleSmoke();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 90:
this.removeChildByTag(100);
particle = new cc.ParticleSun();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
case 100:
this.removeChildByTag(100);
particle = new cc.ParticleRain();
particle.setTag(100);
particle.texture=cc.textureCache.addImage("res/ballfire.plist.png");
this.addChild(particle);
particle.setPosition(size.width/2+100,size.height/2);
break;
}
}
});
var HelloWorldScene = cc.Scene.extend({
onEnter:function () {
this._super();
var layer = new HelloWorldLayer();
this.addChild(layer);
}
});
上述是cocos2d自帶的粒子系統,還可以自定義粒子系統,如:
//添加自定義粒子
cc.textureCache.addImage("res/ballfire.plist.png");
var myp=new cc.ParticleSystem("res/ballfire.plist");
this.addChild(myp);
myp.setPosition(cc.winSize.width/2,cc.winSize.height/2);
最後附上作業鏈接:
http://www.cocoscvp.com/usercode/2016_05_08/c4622e38f30a278640911f24977bc4e0735349ed/