`

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文件,它的代码如下:

 

[html] view plaincopy
 
  1. #ifndef __HELLOWORLD_SCENE_H__  
  2. #define __HELLOWORLD_SCENE_H__  
  3.    
  4. #include "cocos2d.h"  
  5. #include "MyActionScene.h"  
  6.    
  7. typedef enum    ①  
  8. {  
  9.      kExplosion = 1  
  10.     ,kFire  
  11.     ,kFireworks  
  12.     ,kFlower  
  13.     ,kGalaxy  
  14.     ,kMeteor  
  15.     ,kRain  
  16.     ,kSmoke  
  17.     ,kSnow  
  18.     ,kSpiral  
  19.     ,kSun      
  20. } ActionTypes;  ②  
  21.    
  22.    
  23. class HelloWorld : public cocos2d::Layer  
  24. {  
  25. public:  
  26.     static cocos2d::Scene* createScene();  
  27.     virtual bool init();    
  28.     void OnClickMenu(cocos2d::Ref* pSender);  
  29.       
  30.     CREATE_FUNC(HelloWorld);  
  31. };  
  32.    
  33. #endif // __HELLOWORLD_SCENE_H__  

 

 

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

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

 

[html] view plaincopy
 
  1. #ifndef __MYACTION_SCENE_H__  
  2. #define __MYACTION_SCENE_H__  
  3.    
  4. #include "cocos2d.h"  
  5. #include "HelloWorldScene.h"  
  6.    
  7. class MyAction : public cocos2d::Layer  
  8. {  
  9. cocos2d::LabelBMFont* pLabel;   ①  
  10.    
  11. public:  
  12. static cocos2d::Scene* createScene();  
  13.     virtual bool init();  
  14. virtual void onEnterTransitionDidFinish();  ②  
  15.       
  16.     CREATE_FUNC(MyAction);   
  17.     void backMenu (cocos2d::Ref* pSender);  ③  
  18. };  
  19.    
  20. #endif // __MYACTION_SCENE_H__  

 

 

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

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

 

[html] view plaincopy
 
  1. bool MyAction::init()  
  2. {  
  3.     if ( !Layer::init() )  
  4.     {  
  5.         return false;  
  6.     }  
  7.       
  8.     Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    
  10. auto pItmLabel = Label::createWithBMFont("fonts/fnt8.fnt", "<Back");  
  11.     auto backMenuItem = MenuItemLabel::create(pItmLabel,    
  12. CC_CALLBACK_1(MyAction::backMenu, this));  
  13. backMenuItem->setPosition(Point(visibleSize.width - 100, 100));  
  14.    
  15. Menu* mn = Menu::create(backMenuItem,  NULL);  
  16. mn->setPosition(Point::ZERO);  
  17. this->addChild(mn);  
  18.    
  19. pLabel =  Label::createWithBMFont("fonts/fnt8.fnt", "");  
  20. pLabel->setPosition(Point(visibleSize.width / 2, visibleSize.height - 50));  
  21. this->addChild(pLabel, 3);  
  22.    
  23.     return true;  
  24. }  
  25.    
  26. void MyAction::onEnterTransitionDidFinish()  
  27. {     
  28. Layer::onEnterTransitionDidFinish();  
  29.    
  30. ParticleSystem* system;  
  31.       
  32.     switch (this->getTag()) {    ①  
  33. case kExplosion:  
  34.             system = ParticleExplosion::create();  
  35.             pLabel->setString("Explosion ");  
  36. break;  
  37. case kFire:  
  38.             system = ParticleFire::create();  
  39.             pLabel->setString("Fire");  
  40. break;  
  41. case kFireworks:  
  42.             system = ParticleFireworks::create();  
  43.             pLabel->setString("Fireworks");  
  44. break;  
  45. case kFlower:  
  46.             system = ParticleFlower::create();  
  47.             pLabel->setString("Flower");  
  48. break;  
  49. case kGalaxy:  
  50.             system = ParticleGalaxy::create();  
  51.             pLabel->setString("Galaxy");  
  52.             break;  
  53. case kMeteor:  
  54.             system = ParticleMeteor::create();  
  55.             pLabel->setString("Meteor");  
  56. break;  
  57. case kRain:  
  58.             system = ParticleRain::create();  
  59.             pLabel->setString("Rain");  
  60. break;  
  61. case kSmoke:  
  62.             system = ParticleSmoke::create();  
  63.             pLabel->setString("Smoke");  
  64. break;  
  65.         case kSnow:  
  66.             system = ParticleSnow::create();  
  67.             pLabel->setString("Snow");  
  68. break;  
  69. case kSpiral:  
  70.             system = ParticleSpiral::create();  
  71.             pLabel->setString("Spiral");  
  72. break;  
  73. case kSun:  
  74.             system = ParticleSun::create(); ②  
  75.             pLabel->setString("Sun");  
  76. break;  
  77.     }  
  78.    
  79.         Size visibleSize = Director::getInstance()->getVisibleSize();  
  80. system->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));  
  81.    
  82.     this->addChild(system);  
  83. }  

 

 

我们在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课堂微信公共平台
分享到:
评论

相关推荐

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    2. **图形与动画**:讲解如何使用Cocos2d-x的绘图API绘制2D图形,实现精灵(Sprite)、动画(Animation)和粒子系统(Particle System)。 3. **物理引擎**:介绍Cocos2d-x内置的Box2D物理引擎,用于模拟游戏中的...

    Cocos2d-x实战 JS卷

    3. **图形渲染**:学习如何使用Cocos2d-x的绘图API,包括纹理、精灵批处理、动画和粒子系统,创建丰富的视觉效果。 4. **物理引擎**:了解Cocos2d-x内置的Box2D或Chipmunk物理引擎,如何模拟真实世界的物理行为,如...

    cocos2d-x 案例开发大全 第二章(源码)

    6. **粒子系统(Particle System)**:cocos2d-x内置了强大的粒子系统,可用于创建各种特效,如火、烟雾、爆炸等。 7. **脚本支持**:除了C++,cocos2d-x还支持JavaScript和Lua脚本语言,提供更灵活的开发方式。在...

    cocos2d-x入门讲解

    Cocos2d-x内置了资源加载和管理机制,支持图片、音频、字体等多种资源类型,能有效优化资源的加载和使用。 十、网络通信 通过Cocos2d-x的网络模块,开发者可以实现游戏的网络功能,如在线排行榜、多人对战等。 ...

    cocos2D-lua 核心编程内置代码

    Cocos2d-lua是一款基于Cocos2d-x引擎的轻量级游戏开发框架,它将强大的C++底层引擎与灵活易用的Lua脚本语言相结合,为游戏开发者提供了一个高效、便捷的游戏开发平台。在“Cocos2d-x之Lua核心编程(第二版)_配套代码...

    Cocos2d-X by Example Beginner's Guide

    《Cocos2d-X by Example Beginner's Guide》是2013年由Packt Publishing出版的一本面向初学者的Cocos2d-X教程。Cocos2d-X是一个强大的、开源的游戏开发框架,支持跨平台开发,包括Android和iOS等移动设备。这本书...

    cocos2d-x帮助文档

    cocos2d-x内置了存档和读档机制,如UserDefault用于存储用户设置和游戏进度,而FileUtils则提供了文件操作接口,便于处理游戏资源的本地存储和加载。 十、国际化与本地化 cocos2d-x支持多语言环境,开发者可以通过...

    cocos2d-x中国象棋

    虽然它没有内置AI功能,但该项目的源代码提供了一个很好的学习平台,让开发者能够理解如何利用Cocos2d-x构建一个基本的棋类游戏。 Cocos2d-x是一款广泛使用的开源2D游戏开发框架,由C++编写,支持跨平台开发,包括...

    cocos2d-x权威指南源代码

    cocos2d-x的核心功能包括精灵(Sprite)管理、场景(Scene)切换、动作(Action)设计、物理引擎支持、粒子系统、触摸事件处理、动画制作、定时器及调度、UI组件以及音频播放等。 在《Cocos2D-x权威指南》这本书中...

    Cocos2d-x游戏引擎实战开发炸弹超人

    1. **渲染系统**:Cocos2d-x采用Sprite和Layer等概念,构建2D图形,支持精灵动画、粒子系统、骨骼动画等多种视觉效果。它还提供了强大的图层管理和场景管理机制,使得游戏世界构建更为便捷。 2. **物理引擎**:集成...

    cocos2d-x-Introduction.zip_cocos2d_cocos2d-x

    cocos2d-x提供了完善的动画框架,可以创建时间轴动画、序列化动作、粒子效果等,使得游戏中的角色和场景动态表现力十足。 七、事件处理 cocos2d-x的事件处理系统支持触摸、键盘、鼠标等多种输入设备的事件监听,...

    cocos2d-x实战_lua卷

    首先,会介绍Cocos2d-x的基本概念,包括它的架构、渲染系统、物理引擎、动画和粒子效果等。理解这些基础知识是进行游戏开发的前提,它们为构建游戏场景和交互提供了坚实的基础。 接下来,书中会详细讲解Lua语言在...

    Cocos2d-x 1.0.1-x-0.11.0 手册

    Cocos2d-x是一款开源的游戏开发框架,广泛用于2D游戏、实时应用和互动媒体的制作。1.0.1-x-0.11.0是Cocos2d-x的一个版本,这个版本的手册提供了丰富的开发指导和参考资料,旨在帮助开发者理解和使用这个框架。 ...

    COCOS2D-X引擎框架介绍(带视频)

    1. **2D渲染**:COCOS2D-X提供了一套完善的2D渲染系统,包括精灵(Sprite)、纹理(Texture)、图层(Layer)、场景(Scene)等基本元素,以及动画、物理引擎、粒子系统等高级功能,能够帮助开发者轻松构建各种复杂...

    cocos2d-x高仿微信打飞机

    【cocos2d-x高仿微信打飞机】是一款基于cocos2d-x游戏引擎开发的休闲射击游戏,模仿了微信内置的"飞机大战"。它为初学者提供了一个很好的实践平台,通过学习这款游戏的源代码,可以深入了解cocos2d-x引擎在实际项目...

    cocos2d-x-2.2.0.zip 完整版包

    6. **粒子系统(Particle System)**:内置的粒子系统允许开发者创建各种特效,如火、烟雾、星光等,增强游戏视觉表现。 7. **游戏性能优化**:2.2.0版本中包含了对多线程的支持,以及内存管理和渲染优化,有助于...

    我所理解的Cocos2d-x P438.pdf

    9. **粒子系统**:Cocos2d-x包含一个强大的粒子系统,可以生成各种复杂的粒子效果,如火焰、烟雾、雪花等,为游戏增添视觉特效。 10. **动画系统**:基于SpriteFrameCache和Animation类,Cocos2d-x可以轻松创建和...

    Cocos2d-X by Example Beginner's Guide-code

    《Cocos2d-X by Example Beginner's Guide-code》是一本专为初学者设计的Cocos2d-X游戏开发指南,其附带的代码文件旨在帮助读者深入理解和实践Cocos2d-X框架。Cocos2d-X是一个开源的游戏开发框架,基于C++,支持iOS...

    基于cocos2d-2.0-x-2.0.3的游戏实例魔塔(win版)

    cocos2d-x有内置的Texture Atlas工具,可以将多张图片合并成一张大图,减少加载时间和内存占用。 8. **调试与优化**:cocos2d-x提供了一系列的调试工具,如Profiler可以帮助我们找出性能瓶颈,优化代码。 在实际...

    cocos2d-x 权威指南(高清)

    - **粒子系统**:讲解如何使用Cocos2D-x的粒子系统创建复杂视觉效果。 - **算法应用**:介绍如何将经典算法应用于游戏开发中,提高游戏性能。 - **内存管理与性能优化**:提供一系列技巧来减少内存占用并提高游戏...

Global site tag (gtag.js) - Google Analytics