zoukankan      html  css  js  c++  java
  • [Cocos2d-x For WP8]Particle粒子系统

        在游戏中,经常要实现一些真实的效果,这些效果(如,火焰,雪花等)都是由大量微粒组合而形成的。为了在游戏中实现这种效果,我们必须引进粒子系统,粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子状态。大量的粒子叠加就可以产生我们需要的特效。

        在cocos2d-x引擎中,粒子系统使用CCParticleSystem来表示,又分为两大类,重力式粒子系统CCParticleSystemPoint和放射式粒子系统CCParticleSystemQuad,两者在功能上略有不同,CCParticleSystemQuad支持围绕轴线旋转,CCParticleSystemQuad支持更多粒子对象和缩放,重力式故名思义,系统中存在重力,重力大小可以自己定义,包括的参数有:重心,速度,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,角加速度,线加速度,半径,分组模式(是否随重心移动),放射性系统恰恰相反,不存在重力,包括的参数有:重心,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,绕重心为轴心旋转角度,半径,分组模式(是否随重心移动)。

        那么下面是每个粒子都具有以下一些属性及其规则:

    1.Coordinate(坐标)
    在烟火爆炸的时刻,每个粒子都有一个相同的初始坐标,随着时间的推移,粒子的新坐标将由它的旧坐标和加速度来求得
    2.Velocity(速度)
    每个粒子都有一个随机产生的初始速度,粒子的新速度由加速度和空气阻尼来求得
    3.Acceleration(加速度)
    在烟火中,每个粒子的加速度都等于重力加速度
    4.Color(颜色)
    粒子颜色取决于粒子的速度或生命值的大小
    5.Life(生命值)
    每个粒子都有一个初始的随机生命值,这个值将随着时间的推移而逐渐减小,直到等于0
     
        那么实现粒子效果有3中方式:
    1.自定义实现效果
    2.使用Cocos2d-x内置的粒子效果去实现
    3.通过plist文件创建
     
    示例代码:
    //在init方法里面初始化当前的实例
    bool HelloWorld::init()
    {
        bool bRet = false;
        do 
        {
            //CCLayer进行初始化,初始化失败跳出循环
            if ( !CCLayer::init() )
            {
                break;
            }
            //获取手机屏幕的大小
            CCSize size = CCDirector::sharedDirector()->getWinSize();
    //1自定义实现
            //建立一个粒子系统  
            CCParticleSystem* pParticleSystem=new CCParticleSystemQuad();  
            //产生300个粒子  
            pParticleSystem->initWithTotalParticles(300);  
            //设置粒子图片  
            pParticleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("cat.png"));  
            //设置粒子系统持续时间  
            pParticleSystem->setDuration(-1);  
            //设置重力方向  
            pParticleSystem->setGravity(CCPointZero);  
            //设置角度,角度变化率  
            pParticleSystem->setAngle(0);  
            pParticleSystem->setAngleVar(360);  
            //设置运动速度,运动速度的变化率  
            pParticleSystem->setSpeed(50);  
            pParticleSystem->setSpeedVar(10);  
            //设置径向加速度,径向加速度的变化率  
            pParticleSystem->setRadialAccel(70);  
            pParticleSystem->setRadialAccelVar(10);  
            //设置切向加速度,径向加速度的变化率  
            pParticleSystem->setTangentialAccel(80);  
            pParticleSystem->setTangentialAccelVar(0);  
            //设置粒子初始位置,位置变化率  
            pParticleSystem->setPosition(size.width/2,size.height/2);  
            pParticleSystem->setPosVar(ccp(100,100));  
            //设置粒子存在时间,时间变化率  
            pParticleSystem->setLife(2);  
            pParticleSystem->setLifeVar(0.3);  
            //设置粒子初始颜色,颜色变化率  
            ccColor4F cccStart={0.5,0.5,0.5,1.0};  
            pParticleSystem->setStartColor(cccStart);  
            pParticleSystem->setStartColorVar(cccStart);  
            //设置粒子结束颜色,颜色变化率  
            ccColor4F cccEnd={0.5,0.5,0.5,1.0};  
            pParticleSystem->setStartColor(cccEnd);  
            pParticleSystem->setStartColorVar(cccEnd);  
            //设置粒子初始大小,大小变化率  
            pParticleSystem->setStartSize(10);  
            pParticleSystem->setStartSizeVar(20);  
            //设置粒子结束大小,大小变化率  
            pParticleSystem->setStartSize(12);  
            pParticleSystem->setStartSizeVar(12);  
            //设置每秒产生粒子数  
            pParticleSystem->setEmissionRate(pParticleSystem->getTotalParticles()/pParticleSystem->getLife());  
          
            this->addChild(pParticleSystem,1);
            
    //2使用系统自带的
    
            CCParticleSystem* m_emitter;  
            //烟花粒子效果
            m_emitter = CCParticleFireworks::create();  
            m_emitter->retain();  
            this->addChild(m_emitter, 10);  
            m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("cat.png") );  
            m_emitter->setPosition(ccp(300,320));
    /*
    
    -- CCParticleSystem(所有粒子系统的父类)  
    -- CCParticleSystemPoint、CCParticleSystemQuad 点粒子和方形粒子系统  
       -- CCParticleExplosion       (爆炸粒子效果)  
       -- CCParticleFireworks       (烟花粒子效果)  
       -- CCParticleFire               (火焰粒子效果)  
       -- CCParticleFlower           (花束粒子效果)  
       -- CCParticleGalaxy          (星系粒子效果)  
       -- CCParticleMeteor          (流星粒子效果)  
       -- CCParticleSpiral           (漩涡粒子效果)  
       -- CCParticleSnow            (雪粒子效果)  
       -- CCParticleSmoke          (烟粒子效果)  
       -- CCParticleSun              (太阳粒子效果)  
       -- CCParticleRain             (雨粒子效果)
    
    */
    
    //第三种方法通过plist文件创建
            CCParticleSystemQuad *system = new CCParticleSystemQuad();
            system->initWithFile("Images/SpinningPeas.plist");//plist文件可以通过例子编辑器获得
            system->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("cat.png")
            ,      CCRectMake(0,0,32,32));
            addChild(system, 10);
            system->setPosition(ccp(300,320)); 
    
            //接收界面的的触摸事件
            setTouchEnabled(true);
    
            bRet = true;
        } while (0);
        //返回成功
        return bRet;
    }

    运行的效果:

     

  • 相关阅读:
    java关键字之synchronized
    java多线程之线程安全
    java多线程之管道流
    java多线程之多生产者-多消费者
    java多线程之生产者-消费者
    java多线程之wait和notify
    python读取json文件并解析
    java之继承中的静态变量
    shell多线程(3)while循环
    equals与hashcode
  • 原文地址:https://www.cnblogs.com/linzheng/p/3279364.html
Copyright © 2011-2022 走看看