粒子特效
2017-09-01 11:00
134 查看
1、使用plist文件创建一个粒子
auto water = ParticleSystemQuad::create("water.plist");
water->setPosition(visibleSize.width/2, visibleSize.height*0.8);
this->addChild(water);
2、自定义粒子系统
MyParticle.h
#include <iostream>
#include "cocos2d.h"
class MyParticle : public cocos2d::ParticleSystemQuad
{
public:
// create函数
static MyParticle* create();
// 初始化粒子函数
virtual bool initWithTotalParticles(int numberOfParticles);
};
MyParticle.cpp
#include "MyParticle.h"
USING_NS_CC;
MyParticle* MyParticle::create()
{
MyParticle* ret = new MyParticle();
// 初始化350个粒子
if (ret && ret->initWithTotalParticles(350))
{
ret->autorelease();
return ret;
}
else
{
CC_SAFE_DELETE(ret);
}
return nullptr;
}
bool MyParticle::initWithTotalParticles(int numberOfParticles)
{
if( ParticleSystemQuad::initWithTotalParticles(numberOfParticles) )
{
// 粒子发射器的持续时间,kCCParticleDurationInfinity表示粒子效果永远持续下去
setDuration(ParticleSystem::DURATION_INFINITY);
// 发射器模式:重力模式(kCCParticleModeGravity)、半径模式(kCCParticleModeRadius)
setEmitterMode(ParticleSystem::Mode::GRAVITY);
// setEmitterMode(ParticleSystem::Mode::RADIUS);
if (getEmitterMode() == ParticleSystem::Mode::GRAVITY) {
setSourcePosition(Vec2(-10, 0));
// gravity:粒子在x轴和y轴的加速度
setGravity(Vec2(0, -90));
// radialAccel:粒子的径向加速度
setRadialAccel(0);
// 粒子间的径向加速度差异
setRadialAccelVar(0);
// tangentialAccel:粒子的切向加速度
setTangentialAccel(100);
// 粒子间的切向加速度差异
setTangentialAccelVar(10);
// speed:粒子的运动速度
setSpeed(150);
// 粒子的速度差异
setSpeedVar(50);
}else{
// startRadius:所发射粒子和粒子效果节点位置间的距离
setStartRadius(120);
// 粒子间开始半径差异
setStartRadiusVar(0);
// endRadius:粒子要旋转到的位置和节点位置间的距离
setEndRadius(10);
// 粒子间结束半径差异
setEndRadiusVar(0);
// rotatePerSecond影响粒子移动的方向、速度
setRotatePerSecond(-150);
// 粒子间每秒的旋转角度差异
setRotatePerSecondVar(0);
}
// 设置粒子发射器的位置和位置类型
setPosVar(Point::ZERO);
setPositionType(ParticleSystem::PositionType::FREE);
// 粒子发射的方向
setAngle(80);
setAngleVar(20);
// 粒子的生命周期
setLife(2.0f);
setLifeVar(1.0f);
// 每一帧所发射的粒子数量
setEmissionRate(getTotalParticles()/getLife());
// 粒子的颜色
setStartColor(Color4F(1.0f, 1.0f, 1.0f, 1.0f));
setStartColorVar(Color4F(0.5f, 0.5f, 0.5f, 0.5f));
setEndColor(Color4F(0.2f, 0.2f, 0.2f, 0.2f));
setEndColorVar(Color4F(0.1f, 0.1f, 0.1f, 0.1f));
// 设置粒子大小,单位是像素
setStartSize(6.0f);
setStartSizeVar(2.0f);
// START_SIZE_EQUAL_TO_END_SIZE使粒子大小在其生命周期中不发生变化
setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE);
setEndSizeVar(0);
// 粒子的纹理fire.png
setTexture(Director::getInstance()->getTextureCache()->addImage("fire.png"));
// 粒子的混合模式
setBlendFunc((BlendFunc){GL_SRC_ALPHA,GL_DST_ALPHA});
setBlendAdditive(false);
return true;
}
return false;
}
其他类调用自定义粒子系统
// 测试自定义粒子系统
auto particle = MyParticle::create();
particle->setPosition(visibleSize.width/2, visibleSize.height/2);
this->addChild(particle);
3、ParticleEffect的使用
// auto fire = ParticleFire::create(); //
火焰粒子系统
// auto fireworks = ParticleFireworks::create(); //烟花粒子系统
// auto flower = ParticleFlower::create(); //花朵粒子系统
// auto galaxy = ParticleGalaxy::create(); //
银河系粒子系统
// auto meteor = ParticleMeteor::create(); //
流星粒子系统
// auto rain = ParticleRain::create(); //
下雨粒子系统
// auto smoke = ParticleSmoke::create(); //
烟雾粒子系统
// auto snow = ParticleSnow::create(); //
下雪粒子系统
// auto spiral = ParticleSpiral::create(); //
螺旋粒子系统
// auto sun = ParticleSun::create(); // 太阳粒子系统
// 创建爆炸粒子系统
auto explosion = ParticleExplosion::create();
// 设置爆炸粒子系统的位置
explosion->setPosition(visibleSize.width/2, visibleSize.height/2);
// 添加为当前层的子节点
this->addChild(explosion);
auto water = ParticleSystemQuad::create("water.plist");
water->setPosition(visibleSize.width/2, visibleSize.height*0.8);
this->addChild(water);
2、自定义粒子系统
MyParticle.h
#include <iostream>
#include "cocos2d.h"
class MyParticle : public cocos2d::ParticleSystemQuad
{
public:
// create函数
static MyParticle* create();
// 初始化粒子函数
virtual bool initWithTotalParticles(int numberOfParticles);
};
MyParticle.cpp
#include "MyParticle.h"
USING_NS_CC;
MyParticle* MyParticle::create()
{
MyParticle* ret = new MyParticle();
// 初始化350个粒子
if (ret && ret->initWithTotalParticles(350))
{
ret->autorelease();
return ret;
}
else
{
CC_SAFE_DELETE(ret);
}
return nullptr;
}
bool MyParticle::initWithTotalParticles(int numberOfParticles)
{
if( ParticleSystemQuad::initWithTotalParticles(numberOfParticles) )
{
// 粒子发射器的持续时间,kCCParticleDurationInfinity表示粒子效果永远持续下去
setDuration(ParticleSystem::DURATION_INFINITY);
// 发射器模式:重力模式(kCCParticleModeGravity)、半径模式(kCCParticleModeRadius)
setEmitterMode(ParticleSystem::Mode::GRAVITY);
// setEmitterMode(ParticleSystem::Mode::RADIUS);
if (getEmitterMode() == ParticleSystem::Mode::GRAVITY) {
setSourcePosition(Vec2(-10, 0));
// gravity:粒子在x轴和y轴的加速度
setGravity(Vec2(0, -90));
// radialAccel:粒子的径向加速度
setRadialAccel(0);
// 粒子间的径向加速度差异
setRadialAccelVar(0);
// tangentialAccel:粒子的切向加速度
setTangentialAccel(100);
// 粒子间的切向加速度差异
setTangentialAccelVar(10);
// speed:粒子的运动速度
setSpeed(150);
// 粒子的速度差异
setSpeedVar(50);
}else{
// startRadius:所发射粒子和粒子效果节点位置间的距离
setStartRadius(120);
// 粒子间开始半径差异
setStartRadiusVar(0);
// endRadius:粒子要旋转到的位置和节点位置间的距离
setEndRadius(10);
// 粒子间结束半径差异
setEndRadiusVar(0);
// rotatePerSecond影响粒子移动的方向、速度
setRotatePerSecond(-150);
// 粒子间每秒的旋转角度差异
setRotatePerSecondVar(0);
}
// 设置粒子发射器的位置和位置类型
setPosVar(Point::ZERO);
setPositionType(ParticleSystem::PositionType::FREE);
// 粒子发射的方向
setAngle(80);
setAngleVar(20);
// 粒子的生命周期
setLife(2.0f);
setLifeVar(1.0f);
// 每一帧所发射的粒子数量
setEmissionRate(getTotalParticles()/getLife());
// 粒子的颜色
setStartColor(Color4F(1.0f, 1.0f, 1.0f, 1.0f));
setStartColorVar(Color4F(0.5f, 0.5f, 0.5f, 0.5f));
setEndColor(Color4F(0.2f, 0.2f, 0.2f, 0.2f));
setEndColorVar(Color4F(0.1f, 0.1f, 0.1f, 0.1f));
// 设置粒子大小,单位是像素
setStartSize(6.0f);
setStartSizeVar(2.0f);
// START_SIZE_EQUAL_TO_END_SIZE使粒子大小在其生命周期中不发生变化
setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE);
setEndSizeVar(0);
// 粒子的纹理fire.png
setTexture(Director::getInstance()->getTextureCache()->addImage("fire.png"));
// 粒子的混合模式
setBlendFunc((BlendFunc){GL_SRC_ALPHA,GL_DST_ALPHA});
setBlendAdditive(false);
return true;
}
return false;
}
其他类调用自定义粒子系统
// 测试自定义粒子系统
auto particle = MyParticle::create();
particle->setPosition(visibleSize.width/2, visibleSize.height/2);
this->addChild(particle);
3、ParticleEffect的使用
// auto fire = ParticleFire::create(); //
火焰粒子系统
// auto fireworks = ParticleFireworks::create(); //烟花粒子系统
// auto flower = ParticleFlower::create(); //花朵粒子系统
// auto galaxy = ParticleGalaxy::create(); //
银河系粒子系统
// auto meteor = ParticleMeteor::create(); //
流星粒子系统
// auto rain = ParticleRain::create(); //
下雨粒子系统
// auto smoke = ParticleSmoke::create(); //
烟雾粒子系统
// auto snow = ParticleSnow::create(); //
下雪粒子系统
// auto spiral = ParticleSpiral::create(); //
螺旋粒子系统
// auto sun = ParticleSun::create(); // 太阳粒子系统
// 创建爆炸粒子系统
auto explosion = ParticleExplosion::create();
// 设置爆炸粒子系统的位置
explosion->setPosition(visibleSize.width/2, visibleSize.height/2);
// 添加为当前层的子节点
this->addChild(explosion);
相关文章推荐
- 使用 Cocos2d-x 和粒子编辑器实现“天天爱消除”场景特效
- Cocos2dx 小技巧(九)现成的粒子特效
- 解决粒子特效被NGUI遮挡的问题。
- canvas实现粒子特效
- Silverlight 解谜游戏 之四 粒子特效
- flash特效原理:粒子爆
- libgdx粒子特效 particle effect
- [Html5 canvas]鼠标悬停吸附粒子背景特效
- Cocos2d-x 粒子编辑器使用和渲染特效
- Mask裁切UI粒子特效或者3D模型
- JParticles 2.0 发布,打造炫酷的粒子特效
- Silverlight 2.5D RPG游戏技巧与特效处理:(九)粒子系统
- html5 canvas 粒子特效
- 【Stage3D学习笔记续】真正的3D世界(五):粒子特效
- 粒子系统实现与用户交互的特效
- Unity粒子特效详细属性说明
- 一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(九)粒子系统
- 【Cocos2d游戏开发之十】添加粒子特效并解决粒子系统特效与Layer之间的坐标问题;
- OpenGL粒子特效(From NeHe)
- libgdx之粒子特效