在之前学习动画时,是通过多张图的切换去模拟焰火的效果,但是现在通过粒子系统就不用那么麻烦了
cocos2d 中内置了很多粒子特技
比如:火焰,流星,银河,雪花,雨滴,旋涡
代码可以指定效果范围,夹角,速度,粒子寿命,粒子大小,效果持续时间等等
来看看没有特技的一张图:
加上暴雨:
一般使用步骤
- 创建粒子
- addChild()
常用方法:
- setGravity(Vec2(0,-500));// 粒子重力方向,这和场景的重力是独立的,互不影响
- setRadialAccel(100);// 径向加速度
- setPosVar(Vec2(1000, 0));// 发射点坐标可变相对位置
- setEmissionRate(1000); // 一次发射的粒子数
- setTotalParticles(10000);//总共可用粒子数
- setDuration(-1);// -1 表示特效一直有,其他正数表示特效持续时间
- setScale(1.5);//粒子放大倍数
- setLife(3);//粒子生命周期
- setLifeVar(3);// 在周期的基础上±3 也就是最终粒子的生命周期是 0-6秒的
- setAngle(10);//设置粒子角度
- setAngleVar(3);// 设置粒子可变角度 ,现在也就是 10-3 ~10+3
雨滴 ParticleRain
上代码:
#include "HelloWorldScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
using namespace cocostudio::timeline;
PhysicsWorld * world;
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
// auto scene = Scene::create();
auto scene = Scene::createWithPhysics();
world = scene->getPhysicsWorld();
scene->getPhysicsWorld()->setGravity(Vec2(0,-980));
//world->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
// 1. super init first
if ( !Layer::init() )
{
return false;
}
//"Rain960x640.jpg"
auto bgNode = Sprite::create("Rain960x640.jpg");
bgNode->setAnchorPoint(Vec2(