首页 > 代码库 > iOS_31_cocos2d_粒子系统ParticleSystem
iOS_31_cocos2d_粒子系统ParticleSystem
下面是的粒子系统的继承结构图
下面介绍一下【Particle Designer】
生成两个文件,一个小纹理,一个plist
其中plist文件结构如下:
自定义粒子特效,使用上面生成的plist文件
cocos2d v3版本中,很重要的一点就是:
CCParticleSystemBase替换了以前版本的CCParticleSystem
CCParticleSystem替换了以前版本的CCParticleSystemQuad
因此,在v3以前的版本,自定义粒子时,用CCParticleSystemQuad
因此,在v3之后的版本,自定义粒子时,用CCParticleSystem就可以了
CCParticleBatchNode,
同spriteBatchNode一样,使用同一个纹理创建的多个相同特效的粒子(如位于屏幕不同位置显示),
可以添加到同一个batchNode中,让它统一管理;
而场景只需与一个batchNode打交道,界面上显示的Node也只有一个
// // ParticleScene.m // 31_cocos2D入门 // // Created by beyond on 14-9-27. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "ParticleScene.h" @interface ParticleScene() { // 演示系统自带的粒子特效 CCParticleSystem *_particleSystem; // 显示粒子特效的名字 CCLabelTTF *_label; } @end @implementation ParticleScene #pragma mark - 覆盖父类方法 -(id)init { if (self=[super init]) { // 1、场景Node 允许交互 self.userInteractionEnabled = YES; // 2、显示粒子特效的名字 _label = [CCLabelTTF labelWithString:@"" fontName:@"Marker Felt" fontSize:30]; _label.positionType = CCPositionTypeNormalized; // 屏幕的右上方 注意这里是笛卡尔坐标系,原点在左下方 _label.position = ccp(0.7f, 0.75f); _label.horizontalAlignment = CCTextAlignmentRight; [self addChild:_label]; } return self; } // 直接覆写,即:不用创建一个sprite In Center - (void)addSpriteInCenter{} // 实现父类的方法,添加一个按钮到屏幕上 - (void)addShowBtns { // 1.使用系统默认的粒子特效 [self addBtn:@"【系统粒子】" position:ccp(0, 0) target:self sel:@selector(systemParticleClicked)]; // 2.使用粒子设计器 [self addBtn:@"【粒子设计器】" position:ccp(0, 0.1) target:self sel:@selector(diyParticleClicked)]; // 3.使用ParticleBatchNode [self addBtn:@"【粒子Batch】" position:ccp(0, 0.2) target:self sel:@selector(particleBatchNodeClicked)]; } // 展示系统默认的粒子特效 static int i = 0; - (void)systemParticleClicked { // 要添加,先移除 [_particleSystem removeFromParent]; i++; if (i>11) { i=1; } Class cls; switch (i) { case 1: cls = NSClassFromString(@"CCParticleFire"); break; case 2: cls = NSClassFromString(@"CCParticleFireworks"); break; case 3: cls = NSClassFromString(@"CCParticleSun"); break; case 4: cls = NSClassFromString(@"CCParticleGalaxy"); break; case 5: cls = NSClassFromString(@"CCParticleFlower"); break; case 6: cls = NSClassFromString(@"CCParticleMeteor"); break; case 7: cls = NSClassFromString(@"CCParticleSpiral"); break; case 8: cls = NSClassFromString(@"CCParticleExplosion"); break; case 9: cls = NSClassFromString(@"CCParticleSmoke"); break; case 10: cls = NSClassFromString(@"CCParticleSnow"); break; case 11: cls = NSClassFromString(@"CCParticleRain"); break; default: break; } _particleSystem = [cls node]; // 设置自定义纹理和位置后,添加到场景中(默认纹理是fire.png) _particleSystem.texture = [CCTexture textureWithFile:@"circle.png"]; _particleSystem.position = ccp(self.contentSize.width/2,self.contentSize.height*0.3); [self addChild:_particleSystem]; // 2、显示粒子特效的名字 _label.string = NSStringFromClass(cls); } // 自定义粒子特效,使用粒子设计器 - (void)diyParticleClicked { CCParticleSystem *diyParticleSystem = [CCParticleSystem particleWithFile:@"circle.plist"]; diyParticleSystem.position = ccp(self.contentSize.width/2,self.contentSize.height*0.5); // 添加到场景 [self addChild:diyParticleSystem]; } // 同spriteBatchNode一样,使用同一个纹理创建的多个粒子特效,可以添加到同一个batchNode中,让它统一管理;而场景只需与一个batchNode打交道,界面上显示的Node也只有一个 - (void)particleBatchNodeClicked { // CCParticleBatchNode *batch = [CCParticleBatchNode batchNodeWithFile:@""]; // [batch addChild:p1,p2,p3]; } @end
下面是系统自带的粒子效果,它们全继承自ParticleSystemQuad,
而ParticleSystemQuad继承自:ParticleSystem
注意:自带的粒子效果,默认要用到一张名为fire.png图片作为纹理
但,可以通过texture属性另行设置
图片编码:在特殊的plist文件中,通过一个key,包含了一个图片的所有编码,从而,创建粒子特效时,不再需要一张.png图片
如下面的这个plist文件,
最后一项key:textureImageData,里面所有字串,就代表着一张完整的图片
从而,无需再另外导入一张.png图片
类似的图片编码,还出现在cocos2d屏幕左下角的帧率显示的数字上面
导演类,决定显示在下角的帧率数字
command+单击,进入
通过再次进入,发现,显示的帧率,其实是
iOS_31_cocos2d_粒子系统ParticleSystem