zoukankan      html  css  js  c++  java
  • cocos2d-x 粒子效果

    大规模运动的物体通常有两种方法实现

    1。使用帧动画来模拟

    2,粒子效果


    粒子系统有CCParticleSystem类实现,CCParticleSystem实现了对粒子的控制与调度,对粒子的操作包含:

    1,产生粒子

    2。更新粒子状态

    3,回收无效粒子


    粒子系统继承自CCNode ,能够加入到其它节点之中

    cocos2d-x内置了一些粒子效果如:

    - CCParticleSystem(全部粒子系统的父类)
    -- CCParticleSystemPoint、CCParticleSystemQuad (点粒子和方形粒子系统,都继承了CCParticleSystem的全部属性)
    -- CCParticleExplosion  :爆炸粒子效果
    -- CCParticleFireworks  :烟花粒子效果
    -- CCParticleFire             :火焰粒子效果
    -- CCParticleFlower       :花束粒子效果
    -- CCParticleGalaxy        :星系粒子效果
    -- CCParticleMeteor       :流星粒子效果
    -- CCParticleSpiral         :漩涡粒子效果
    -- CCParticleSnow         :雪粒子效果)
    -- CCParticleSmoke      :烟粒子效果
    -- CCParticleSun            :太阳粒子效果
    -- CCParticleRain          :雨粒子效果

    样例:

    ParticleSystem *particle = ParticleSnow::create();
    particle->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png"));
    this->addChild(particle);

    上面这段代码加入到init里面就能够看到雪花的粒子效果


    首先须要知道的是粒子的发射器模式,不同发射器模式下有不同的可用參数。也因此会产生不同的效果。这个就有点像是模具。用什么模具就生成出什么样的模型产品,假设随便引用參数那是有可能会报错的:

    1.重力模式->setEmitterMode(kCCParticleModeGravity)

    重力模式下能够依照设定的重力点setGravity,依据附加參数如速度、径向加速度、切向加速度……来获得相应的粒子效果。

    2.半径模式->->setEmitterMode(kCCParticleModeRadius)

    这个模式下,粒子的活动范围、动作是按圆形、半径来划分的。像上面的爆炸中心效果我就设定粒子初始产生的活动半径范围和粒子生命周期结束时活动的半径范围。

    粒子还有三种关于运动位置坐标的影响模式->setPositionType()。这里引用一段解释:

    如果粒子发射器A被增加了SpriteB,  ( B->addChild(A) )

    1.kCCPositionTypeFree

    当B运动时,若设置Free,A发出的粒子则会出现拖尾现象。

    若设置其它的,则不会出现拖尾。

    2.kCCPositionTypeRelative

    当A相对B中坐标变动的时,若设置Relative,A发出的粒子则会出现拖尾现象。

    3.kCCPositionTypeGrouped

    而设置Grouped,无论什么坐标改变都不会发生拖尾现象。

    总结,Free是相对于世界,Relative相对于父节点,Grouped是相对于发射器坐标。

     

    @1——依据 plist 文件创建粒子系统:

     

    1. CCParticleSystemQuad *emitter1 = CCParticleSystemQuad::create("Particle/BurstPipe.plist");  
    2.   
    3.        emitter1->setPosition(ccp( size.width/2,    size.height/2));    // 设置发射粒子的位置  
    4.   
    5. emitter1->setAutoRemoveOnFinish(true);                          // 完毕后制动移除  
    6.   
    7. emitter1->setDuration(10);                                      // 设置粒子系统的持续时间秒  
    8.   
    9. this->addChild(emitter1, 0, 1);  

    不使用plist文件创建粒子效果

     auto size = Director::getInstance()->getWinSize();
        auto m_emitter = ParticleSystemQuad::createWithTotalParticles(900);
        m_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png"));


        //The code below we can use both in 2.x and 3.x 
        m_emitter->setDuration(-1);
        m_emitter->setGravity(Point(0, -240));  // in Cocos2d-x-2.x CCPoint(0, -240) is used
        m_emitter->setAngle(90);
        m_emitter->setAngleVar(360);
        m_emitter->setRadialAccel(50);
        m_emitter->setRadialAccelVar(0);
        m_emitter->setTangentialAccel(30);
        m_emitter->setTangentialAccelVar(0);
        m_emitter->setPosition(Point(size.width / 2, size.height));
        m_emitter->setPosVar(Point(400, 0));
        m_emitter->setLife(4);
        m_emitter->setLifeVar(2);
        m_emitter->setStartSpin(30);
        m_emitter->setStartSpinVar(60);
        m_emitter->setEndSpin(60);
        m_emitter->setEndSpinVar(60);
        m_emitter->setStartColor(Color4F(255,255,255,1));
        m_emitter->setStartColorVar(Color4F(0,0,0,0));
        m_emitter->setEndColor(Color4F(255, 255, 255, 1));
        m_emitter->setEndColorVar(Color4F(0, 0, 0, 0));
        m_emitter->setStartSize(30);
        m_emitter->setStartSizeVar(0);
        m_emitter->setEndSize(20.0f);
        m_emitter->setEndSizeVar(0);
        m_emitter->setEmissionRate(100);
        addChild(m_emitter,10);


    在重力模式中,下面属性是合法的:

       gravity (Point)。粒子系统的重力。

       speed (float)。

    粒子们射出的速度。

       speedVar(float)速度变量

       tangencialAccel(float)粒子们的正切加速度

       tangencialAccelVar(float)粒子们正切加速度的变量

       radialAccel(float)粒子们的半径加速度。

       radialAccelVar(float)粒子们半径加速度的变量


    半径模式有下列合法的属性:
       startRadius (a float).粒子的開始半径

     

       startRadiusVar (a float). 開始半径变量
       endRadius (a float). 粒子的结束半径
       endRadiusVar (a float).结束半径变量
       rotatePerSecond (a float).环绕一个来源点的每秒旋转角度
       rotatePerSecondVar (a float).每秒旋转角度变量

    粒子们的常规属性:

    startSize:粒子的初始尺寸(像素值)
    startSizeVar
    endSize:粒子的结束尺寸(假设你想让粒子的開始大小同结束大笑同样,就用一下kCCParticleStartSizeEqualToEndSize
    endSizeVar
    startColor :粒子開始颜色(ccColor4F)
    startColorVar
    endColor :粒子结束颜色
    endColorVar
    startSpin:仅用在CCParticleSystemQuad中,起始螺旋度
    startSpinVar
    endSpin:仅用在CCParticleSystemQuad中,结束螺旋度
    endSpinVar
    life粒子的生命生存时间,单位是秒
    lifeVar
    angle:粒子開始角度,float
    angleVar
    positon:CCPoint粒子位置
    positonVar
    centerOfGravity :CGPoint

    系统通用属性:

    emissionRate duration (a float):每秒有多少粒子被发射

    duration (a float):粒子系统生存时间

    blendFunc (a ccBlendFunc):用于系统渲染的OpenGL的渲染函数

    positionType (a tCCPositionType).:使用kCCPositionTypeFree (默认值)属性能够自由的移动粒子们。或者使用kCCPositionTypeGrouped 让粒子们一组一组的移动。

    texture (a CCTexture2D).粒子的纹理


  • 相关阅读:
    GCDPlot已提交到Sourceforge,成为开源项目[GCDPlot become a open source software in sourceforge]
    GCDPlot 0.32
    谈谈“科技人员和白领是购买盗版的主力”
    c正则匹配小计
    C++ 模板惯用法
    C++模板常用使用方法介绍
    常用正则表达式
    C++ 容易忘的基本语法和特性
    C++ 对象资源管理惯用法
    Int? 代表什么意思, 可为空的值类型(Nullable<T>)需要注意的地方
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6937376.html
Copyright © 2011-2022 走看看