Cocos2d-x内置粒子系统

从类图中我们可以看到Cocos2d-x中有内置的11粒子这些粒子的属性都是预先定义好的我们也可以在程序代码中单独修改某些属性我们在上一节的实例中都已经实现了这些属性的设置。

内置粒子系统

内置的11粒子系统说明如下 

ParticleExplosion。爆炸粒子效果属于半径模式。

ParticleFire。火焰粒子效果属于重力径模式。

ParticleFireworks。烟花粒子效果属于重力模式。

ParticleFlower。花粒子效果属于重力模式。

ParticleGalaxy。星系粒子效果属于半径模式。

ParticleMeteor。流星粒子效果属于重力模式。

ParticleSpiral。漩涡粒子效果属于半径模式。

ParticleSnow。雪粒子效果属于重力模式。

ParticleSmoke。烟粒子效果属于重力模式。

ParticleSun。太阳粒子效果属于重力模式。

ParticleRain。雨粒子效果属于重力模式。

这11种粒子系统每一个都有如下两个create函数通过create函数可以创建粒子对象。

static ParticleExplosion * create () 

static ParticleExplosion * createWithTotalParticles (int numberOfParticles)

其中createWithTotalParticles 函数中的numberOfParticles是粒子的初始化个数。

还有这11种粒子的属性根据它的发射模式不同也会有所不同。

 

 

实例内置粒子系统

下面我们通过一个实例演示一下这11种内置粒子系统。这个实例如图所示左图是一个操作菜单场景选择菜单可以进入到上图动作场景在下图动作场景中演示选择的粒子系统效果点击右下角返回按钮可以返回到菜单场景。

 

下面我们再看看具体的程序代码首先看一下看HelloWorldScene.h文件它的代码如下

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include "MyActionScene.h"

typedef enum	①
{
     kExplosion = 1
    ,kFire
    ,kFireworks
    ,kFlower
    ,kGalaxy
    ,kMeteor
    ,kRain
    ,kSmoke
    ,kSnow
    ,kSpiral
    ,kSun
} ActionTypes; 	②

class HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    virtual bool init();
    void OnClickMenu(cocos2d::Ref* pSender);

    CREATE_FUNC(HelloWorld);
};

#endif // __HELLOWORLD_SCENE_H__

上述代码第①~②是定义个枚举类型ActionTypes枚举类型ActionTypes中定义了11个常量这11个常量对应11个菜单项。

下面我们再看看下一个场景MyActionScene它的MyActionScene.h代码如下

#ifndef __MYACTION_SCENE_H__
#define __MYACTION_SCENE_H__

#include "cocos2d.h"
#include "HelloWorldScene.h"

class MyAction : public cocos2d::Layer
{
cocos2d::LabelBMFont* pLabel;	①

public:
static cocos2d::Scene* createScene();
    virtual bool init();
virtual void onEnterTransitionDidFinish();	②

    CREATE_FUNC(MyAction);
    void backMenu (cocos2d::Ref* pSender);	③
};

#endif // __MYACTION_SCENE_H__

在头文件中第①行代码定义了LabelBMFont成员变量用来在场景中显示粒子系统的名称。第②行代码声明了onEnterTransitionDidFinish回调函数该函数是重写父类函数它将在场景出现后回掉。第③行代码是声明了一个返回菜单点击的回调函数。

MyActionScene的实现代码MyActionScene.ccp文件它的主要代码如下

bool MyAction::init()
{
    if ( !Layer::init() )
    {
        return false;
    }

    Size visibleSize = Director::getInstance()->getVisibleSize();

auto pItmLabel = Label::createWithBMFont("fonts/fnt8.fnt", "<Back");
    auto backMenuItem = MenuItemLabel::create(pItmLabel,
CC_CALLBACK_1(MyAction::backMenu, this));
backMenuItem->setPosition(Point(visibleSize.width - 100, 100));

Menu* mn = Menu::create(backMenuItem,  NULL);
mn->setPosition(Point::ZERO);
this->addChild(mn);

pLabel =  Label::createWithBMFont("fonts/fnt8.fnt", "");
pLabel->setPosition(Point(visibleSize.width / 2, visibleSize.height - 50));
this->addChild(pLabel, 3);

    return true;
}

void MyAction::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();

ParticleSystem* system;

    switch (this->getTag()) {	①
case kExplosion:
            system = ParticleExplosion::create();
            pLabel->setString("Explosion ");
break;
case kFire:
            system = ParticleFire::create();
            pLabel->setString("Fire");
break;
case kFireworks:
            system = ParticleFireworks::create();
            pLabel->setString("Fireworks");
break;
case kFlower:
            system = ParticleFlower::create();
            pLabel->setString("Flower");
break;
case kGalaxy:
            system = ParticleGalaxy::create();
            pLabel->setString("Galaxy");
            break;
case kMeteor:
            system = ParticleMeteor::create();
            pLabel->setString("Meteor");
break;
case kRain:
            system = ParticleRain::create();
            pLabel->setString("Rain");
break;
case kSmoke:
            system = ParticleSmoke::create();
            pLabel->setString("Smoke");
break;
        case kSnow:
            system = ParticleSnow::create();
            pLabel->setString("Snow");
break;
case kSpiral:
            system = ParticleSpiral::create();
            pLabel->setString("Spiral");
break;
case kSun:
            system = ParticleSun::create();	②
            pLabel->setString("Sun");
break;
    }

    	Size visibleSize = Director::getInstance()->getVisibleSize();
system->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));

    this->addChild(system);
}

我们在MyAction::init()函数中初始化场景在MyAction::onEnterTransitionDidFinish ()函数中创建粒子系统对象而不是在MyAction::onEnter()函数创建这是因为MyAction::onEnter()函数调用时候场景还没有显示如果在该函数中创建爆炸等显示一次的粒子系统等到场景显示的时候爆炸已经结束了我们会看不到效果。

代码第①~②行创建了11种粒子系统这里创建粒子系统时候都采用了它们的默认属性值。其中他pLabel->setString("xxx")函数是为场景中标签设置内容这样在进入场景后可以看到粒子系统的名称。

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》‍

本书交流讨论网站http://www.cocoagame.net

更多精彩视频课程请关注智捷课堂Cocos课程http://v.51work6.com

欢迎加入Cocos2d-x技术讨论群257760386

《Cocos2d-x实战 C++卷》现已上线各大商店均已开售‍

京东http://item.jd.com/11584534.html

亚马逊http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当http://product.dangdang.com/23606265.html

互动出版网http://product.china-pub.com/3770734

《Cocos2d-x实战 C++卷》源码及样章下载地址

源码下载地址http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台

时间: 2024-09-26 01:05:18

Cocos2d-x内置粒子系统的相关文章

Cocos2d-JS内置粒子系统

从类图中我们可以看到,Cocos2d-JS中有内置的11种粒子,这些粒子的属性都是预先定义好的,我们也可以在程序代码中单独修改某些属性,我们在上一节的实例中都已经实现了这些属性的设置.内置粒子系统内置的11种粒子系统说明如下: ParticleExplosion.爆炸粒子效果,属于半径模式.ParticleFire.火焰粒子效果,属于重力径模式.ParticleFireworks.烟花粒子效果,属于重力模式.ParticleFlower.花粒子效果,属于重力模式.ParticleGalaxy.星

将 Oracle 内置的安全特性用于 PHP

当今大多数 Web 应用程序都需要至少采用某种基本的安全策略.例如,提供用口令保护的内容的网站.仅具有管理员后端的网站.网志和个人杂志.电子商务网站.企业内联网,等等. 构建这些类型的 Web 应用程序最常用的设计方法是将安全策略整合到 Web 应用程序的业务逻辑中,即由应用程序决定某个用户是否有权访问数据库中的某个数据.在这种情形下,数据库的角色仅为存储数据和依请求提供数据.换句话说,如果 Web 应用程序命令数据库提供特定信息,则数据库会直接执行该命令而不检查用户的权限. 在该文中,您将学习

将Oracle内置的安全特性用于php

当今大多数 Web 应用程序都需要至少采用某种基本的安全策略.例如,提供用口令保护的内容的网站.仅具有管理员后端的网站.网志和个人杂志.电子商务网站.企业内联网,等等. 构建这些类型的 Web 应用程序最常用的设计方法是将安全策略整合到 Web 应用程序的业务逻辑中,即由应用程序决定某个用户是否有权访问数据库中的某个数据.在这种情形下,数据库的角色仅为存储数据和依请求提供数据.换句话说,如果 Web 应用程序命令数据库提供特定信息,则数据库会直接执行该命令而不检查用户的权限. 在该文中,您将学习

将Oracle 10g内置的安全特性用于PHP

当今大多数 Web 应用程序都需要至少采用某种基本的安全策略.例如,提供用口令保护的内容的网站.仅具有管理员后端的网站.网志和个人杂志.电子商务网站.企业内联网,等等. 构建这些类型的 Web 应用程序最常用的设计方法是将安全策略整合到 Web 应用程序的业务逻辑中,即由应用程序决定某个用户是否有权访问数据库中的某个数据.在这种情形下,数据库的角色仅为存储数据和依请求提供数据.换句话说,如果 Web 应用程序命令数据库提供特定信息,则数据库会直接执行该命令而不检查用户的权限. 在该文中,您将学习

Win8.1使用内置照片应用的方法

  使用技巧: 进入开始屏幕(或者按Win键切换),点击照片应用,进入图片库. 注:(图片库默认路径存放在系统盘:Users用户名图片库) 例如:打开,浏览图片库下的Windows图片集 任选一张,全屏欣赏,右击空白区域,可以呼出照片应用中各种扩展命令,包括:删除.打开方式.设置为.幻灯片放映.旋转.裁剪.编辑等功能.其中编辑功能是其亮点,超越了之前自带的传统桌面应用中图片浏览器. 照片应用特色功能一:设置图片为锁屏界面.照片动态磁贴. 照片应用特色功能二:随意裁剪图像大小. 照片应用特色功能三

Win8.1内置照片应用

  Windows 8.1的照片应用不仅只限于浏览图片,它甚至肩负后期处理的重任.打开一张照片只需从下向上轻轻一滑,即可调整各种图像参数,如饱和度,对比度等.自带滤镜功能,可以为图象加入各种特殊效果,更易图片的美化. 照片应用功能介绍: 操作步骤:进入开始屏幕(或者按Win键切换),点击照片应用,进入图片库. 注:(图片库默认路径存放在系统盘:Users用户名图片库) 例如:打开,浏览图片库下的Windows图片集 任选一张,全屏欣赏,右击空白区域,可以呼出照片应用中各种扩展命令,包括:删除.打

Python_List对象内置方法详解

前言 在上一篇中介绍了Python的序列和String类型的内置方法,本篇继续学习作为序列类型成员之一的List类型的内置方法. 软件环境 系统  UbuntuKylin 14.04 软件  Python 2.7.3 IPython 4.0.0 列表List 列表是一种容器,存放内存对象的引用.即是任意内存对象的有序集合,不同的类型对象可以存放在同一个列表中.通过索引来访问其中的元素.可以任意的嵌套.伸长.异构.为可变数据类型,支持原处修改列表内部元素的引用. 修改列表的元素 In [130]:

内置函数datediff的妙用

vb中有许多内置的函数都是非常实用,非常棒的,本文就针对datediff来进行介绍! 1.函数作用: 返回两个日期之间的时间间隔. 举例: DateDiff("d", Now, theDate) d代表天(日) now 是当前时间, theDate 就是我们自己定义的一个时间 那么,整个函数的结果就是自定义时间与当前时间的日期差. (顺便将常用的列举一下,s秒.m分钟.h小时.d日.n月.y年) 根据这个函数,我们来制作一个发布时间,显示为多久前的效果 <% limit=Date

ASP内置对象Request和Response详解

request|response|对象|内置对象|详解|内置对象     Request和Response这两个对象是ASP所提供的内置对象中最常用的两个.在浏览器(或其他用户代理)和Web服务器之间,请求与响应中发生的信息交流可以通过ASP中的两个内置对象来进行访问和管理,这两个对象称为Request和Response对象. 在ASP页中所要进行的工作几乎都要访问这两个对象,使用这两个对象的方式将影响页面的效率及可靠性.当然,它们的主要用途是访问用户发回到服务器的值,即从HTML页的<FORM