粒子系统

本文介绍如何在Cocos2d-x中实现多种粒子效果,包括爆炸、火焰、星系等,并演示了粒子系统的不同位置类型及自定义粒子的创建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建工程,名为testParticle

修改HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__


#include "cocos2d.h"


class HelloWorld : public cocos2d::CCLayer

{

public:

    // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)

    virtual bool init();


    // there's no 'id' in cpp, so we recommend to return the class instance pointer

    static cocos2d::CCScene* scene();    

        // preprocessor macro for "static create()" constructor ( node() deprecated )

    CREATE_FUNC(HelloWorld);

};


#endif // __HELLOWORLD_SCENE_H__


修改HelloWorldScene.cpp

#include "HelloWorldScene.h"

#include "SimpleAudioEngine.h"


using namespace cocos2d;

using namespace CocosDenshion;


CCScene* HelloWorld::scene()

{

    // 'scene' is an autorelease object

    CCScene *scene = CCScene::create();

    

    // 'layer' is an autorelease object

    HelloWorld *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 ( !CCLayer::init() )

    {

        return false;

    }

#define particleTest 15

    switch (particleTest) {

        case 1:

        {

            //------爆炸粒子效果

            CCParticleSystem *particleSystem=CCParticleExplosion::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("stars.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

                                        

        }

            break;

        case 2:

        {

            //------火焰粒子效果

            CCParticleSystem *particleSystem=CCParticleFire::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 3:

        {

            //------花束粒子效果

            CCParticleSystem *particleSystem=CCParticleFlower::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 4:

        {

            //------烟花粒子效果

            CCParticleSystem *particleSystem=CCParticleFireworks::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 5:

        {

            //------星系粒子效果

            CCParticleSystem *particleSystem=CCParticleGalaxy::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 6:

        {

            //------流星粒子效果

            CCParticleSystem *particleSystem=CCParticleMeteor::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 7:

        {

            //------下雨粒子效果

            CCParticleSystem *particleSystem=CCParticleRain::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 8:

        {

            //------下雪粒子效果

            CCParticleSystem *particleSystem=CCParticleSnow::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 9:

        {

            //------烟雾粒子效果

            CCParticleSystem *particleSystem=CCParticleSmoke::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 10:

        {

            //------漩涡粒子效果

            CCParticleSystem *particleSystem=CCParticleSpiral::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 11:

        {

            //------太阳粒子效果

            CCParticleSystem *particleSystem=CCParticleSun::create();

            particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 12:

        {

            //------粒子移动

            CCParticleSystem *particleSystemFree=CCParticleSun::create();

            particleSystemFree->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));           

            particleSystemFree->setAutoRemoveOnFinish(true);

            particleSystemFree->setPositionType(kCCPositionTypeFree);

            particleSystemFree->setPosition(ccp(90,160));

            addChild(particleSystemFree);

            

            CCParticleSystem *particleSystemRel=CCParticleSun::create();

            particleSystemRel->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystemRel->setAutoRemoveOnFinish(true);

            particleSystemRel->setPositionType(kCCPositionTypeRelative);

            particleSystemRel->setPosition(ccp(200,160));

            addChild(particleSystemRel);

            

            CCParticleSystem *particleSystemGrp=CCParticleSun::create();

            particleSystemGrp->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

            particleSystemGrp->setAutoRemoveOnFinish(true);

            particleSystemGrp->setPositionType(kCCPositionTypeGrouped);

            particleSystemGrp->setPosition(ccp(300,160));

            addChild(particleSystemGrp);

            

            //让当前Layer来回移动,观察两个移动模式不同的粒子特效

            CCFiniteTimeAction *move=CCMoveBy::create(3,ccp(290,0));

            CCFiniteTimeAction *back=move->reverse();

            this->runAction(CCSequence::create(move,back,NULL));

            

            

        }

            break;

        case 13:

        {

            //------创建自定义粒子

            CCParticleSystem *particleSystem=CCParticleSystemQuad::create("himiParticle.plist");

            particleSystem->setPosition(ccp(240,160));

            addChild(particleSystem);

            

        }

            break;

        case 14:

        {

            //------不使用CCParticleBatchNode创建粒子

            for (int i=0; i<10; i++) {

                CCParticleSystem *particleSystem=CCParticleSun::create();

                particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));

                particleSystem->setPosition(ccp(150+i*20,160));

                addChild(particleSystem);


            }

            

        }

            break;

        case 15:

        {

            //------使用CCParticleBatchNode创建粒子

           

            CCTexture2D *texture=CCTextureCache::sharedTextureCache()->addImage("fire.png");

             CCParticleBatchNode *particleNode=CCParticleBatchNode::createWithTexture(texture);

            for (int i=0; i<10; i++) {

                CCParticleSystem *particleSystem=CCParticleSun::create();

                particleSystem->setTexture(texture);

                particleSystem->setPosition(ccp(150+i*20,160));

                particleNode->addChild(particleSystem);

                

            }

            addChild(particleNode);

        }

            break;


        default:

            break;

    }

   

    

    return true;

}

注意我们可以使用particle Designer来制作粒子,将plist,png加到工程目录下就可。http://particledesigner.71squred.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值