Particle designer粒子编辑器可到这里下载(包含授权码):http://www.cocoachina.com/downloads/code/2012/0706/4424.html
双击即可。
粒子工具ParticleDesigner,一个可视调属性工具。在此说下在项目中怎么来用这个工具导出的文件。
1、点击工具中SAVE,保存为.plist格式文件,然后将文件导入到项目中(最基本的就不用说了)。
PS:下面添加一些OC的使用方法,留作以后查阅
2、然后实例化粒子对象(这里必须用ARCH_OPTIMAL_PARTICLE_SYSTEM来初始化,如果用父类CCParticleSystem将什么都看不到)
CCParticleSystem * system = [ARCH_OPTIMAL_PARTICLE_SYSTEMparticleWithFile:@"fx-explosion.plist"];
[selfaddChild:systemz:1tag:1];
3、OK接下来可以修改下在工具中不能修改的属性
system.positionType=kCCPositionTypeFree;
system.autoRemoveOnFinish=YES;//发射完粒子消失后从父节点移除
system.position= ccp(100,100);//粒子发射器位置
需要注意一点的是positionType这个属性,翻看Himi的教程,里面有个讲到粒子会随精灵的位置变动而变动。这都取决于这个属性的设定。有三个值:
kCCPositionTypeRelative相对模式,粒子发射器会随精灵移动而移动,可用于制作角色身上特效等等
kCCPositionTypeGrouped 这个和上边的产生效果一样(实验得到的结果),区别在于这个是粒子随发射器移动而移动
kCCPositionTypeFree 自由模式,不会随粒子节点移动而移动(可产生火焰、蒸汽等效果)
4、最后我们再说个在测试中遇到的问题,当要显示粒子效果时,在界面上会轻微的卡下,这是粒子在加载贴图资源。这个问题不解决可能会使游戏变得不流畅了。在这里我们可以使用预加载机制,这个方法也是跟教程学的,嘿嘿!学习无处不在嘛!
首先,我们在游戏进入的场景的初始化init中加入[selfpreloadParticleEffect];
- (void)preloadParticleEffect
{
[ARCH_OPTIMAL_PARTICLE_SYSTEMparticleWithFile:@"fx-explosion.plist"];
}
因为particleWithFile方法是以自动释放的方式初始化的粒子,因此不用关心他们的内存释放问题。
当他们释放掉以后他们的贴图会保留再缓存(CCTextureCache)中,因此解决了粒子显示时及时加载贴图的问题。
如果"fx-explosion.plist"里面没有嵌贴图,那就用[[CCTextureCachesharedTextureCache]addImage:@"fire.png"];这个方式先把贴图加入缓存。
ParticleDesigner界面的一些属性
2.1Particle Configuration粒子设置
Max Particles最大粒子数目 lifespan生命周期 lifespan variance生命周期变化率(就是振幅) start Size开始大小 start size variance 开始大小变化率
finish size结束大小 finish size variance 结束大小变化率 particle emit angle 粒子发出角度 particle emit angle variance 粒子发出角度变化率
Rotation Start 起始旋转量 Rotation Start Variance 起始旋转变化率 Rotation End 结束旋转量 Rotation End Variance 终止旋转变化率
2.2Background Color 背景颜色
Red Green Blue RGB配色
2.3Emitter Type发射器类型
Gravity重力型粒子 Radial 放射式粒子 Duration 持续时间
2.4.1Radial Configuration 放射型粒子配置
Max Radius 最大半径 Max Radius Variance最大半径范围 Min Radius 最小半径 Deg.Per Second每秒的角度变化 Deg.Per Second Variance每秒的角度变化率
2.4.2Gravity Configuration 重力型粒子配置
Speed 粒子速度 Speed Variance粒子速度变化率 Radial Acceleration 径向加速度 Radial Accl.Variance 径向加速度变化率
Gravity x重力向量x坐标 Gravity y重力向量y坐标 tangentialAcceleration切向加速度 Tangential Accel.Variance切向加速度变化率
2.5Emitter Location发射器位置
Source Pos Y源点y坐标 Variance 源点y坐标变化率
Source Pos X源点x坐标 Variance 源点x坐标变化率
2.6 Particle Color 粒子颜色
Start 起始颜色 RGBA Finish结束颜色RGBA
Start Variance 其实颜色变化率RGBA Finish Variance 结束颜色变化率RGBA
2.7Particle Texture粒子纹理(粒子图片)
2.8Blend Function混合模式
除了使用 Cocos2d-x 的 11 种内置粒子系统外,我们还可以通过创建 ParticleSystemQuad 对象 ,
设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统。
使用ParticleSystemQuad 自定义粒子系统至少有两种方式可以实现 :代码创建和 plist 文件创建。
代码创建:
主要代码如下
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
auto bg = Sprite::create("background-1.png");
bg->setPosition(Point(visibleSize.width/2,visibleSize.height /2));
this->addChild(bg);
auto particleSystem = ParticleSystemQuad::createWithTotalParticles(200); ①
//设置粒子纹理图片
particleSystem->setTexture(TextureCache::getInstance()->addImage("fire.png")); ②
//设置发射粒子的持续时间-1表示永远持续
particleSystem->setDuration(-1);
//设置粒子的重力方向
particleSystem->setGravity(Point(0,-240));
//设置角度以及偏差
particleSystem->setAngle(90);
particleSystem->setAngleVar(360);
//设置径向加速度以及偏差
particleSystem->setRadialAccel(50);
particleSystem->setRadialAccelVar(0);
//设置粒子的切向加速度以及偏差
particleSystem->setTangentialAccel(30);
particleSystem->setTangentialAccelVar(0);
// 设置粒子初始化位置偏差
particleSystem->setPosVar(Point(400,0));
//设置粒子生命期以及偏差
particleSystem->setLife(4);
particleSystem->setLifeVar(2);
//设置粒子开始时候旋转角度以及偏差
particleSystem->setStartSpin(30);
particleSystem->setStartSpinVar(60);
//设置结束时候的旋转角度以及偏差
particleSystem->setEndSpin(60);
particleSystem->setEndSpinVar(60);
//设置开始时候的颜色以及偏差
particleSystem->setStartColor(Color4F(1,1,1));
//设置结束时候的颜色以及偏差
particleSystem->setEndColor(Color4F(1,1));
//设置开始时候粒子大小以及偏差
particleSystem->setStartSize(30);
particleSystem->setStartSizeVar(0);
//设置粒子结束时候大小以及偏差
particleSystem->setEndSize(20.0f);
particleSystem->setEndSizeVar(0);
//设置每秒钟产生粒子的数量
particleSystem->setEmissionRate(100);
particleSystem->setPosition(Point(visibleSize.width/2,visibleSize.height + 50));
this->addChild(particleSystem);
return true;
}
上述第①行代码ParticleSystemQuad::createWithTotalParticles(200) 是创建 ParticleSystemQuad 对象 ,静态createWithTotalParticles 函数是通过指定初始粒子数来创建粒子对象。
第②行代码是指定粒子的纹理,TextureCache::getInstance()->addImage("snow.png") 语句可以通过指定的纹理 图片创建纹理对象Texture2D , 贴图的纹理图片宽高必须是2的n次幂,大小不要超过64x64 像素,在美工设计纹理图片时候,不用关注太多细节
PLIST创建:
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); auto bg = Sprite::create("background-1.png"); bg->setPosition(Point(visibleSize.width/2,visibleSize.height /2)); this->addChild(bg); auto particleSystem = ParticleSystemQuad::create("fire.plist"); particleSystem->setPosition(Point(visibleSize.width/2,visibleSize.height - 50)); this->addChild(particleSystem); return true; }