从类图中我们可以看到,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")函数是为场景中标签设置内容,这样在进入场景后可以看到粒子系统的名称。
《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11584534.html
当当: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
相关推荐
2. **图形与动画**:讲解如何使用Cocos2d-x的绘图API绘制2D图形,实现精灵(Sprite)、动画(Animation)和粒子系统(Particle System)。 3. **物理引擎**:介绍Cocos2d-x内置的Box2D物理引擎,用于模拟游戏中的...
3. **图形渲染**:学习如何使用Cocos2d-x的绘图API,包括纹理、精灵批处理、动画和粒子系统,创建丰富的视觉效果。 4. **物理引擎**:了解Cocos2d-x内置的Box2D或Chipmunk物理引擎,如何模拟真实世界的物理行为,如...
6. **粒子系统(Particle System)**:cocos2d-x内置了强大的粒子系统,可用于创建各种特效,如火、烟雾、爆炸等。 7. **脚本支持**:除了C++,cocos2d-x还支持JavaScript和Lua脚本语言,提供更灵活的开发方式。在...
Cocos2d-x内置了资源加载和管理机制,支持图片、音频、字体等多种资源类型,能有效优化资源的加载和使用。 十、网络通信 通过Cocos2d-x的网络模块,开发者可以实现游戏的网络功能,如在线排行榜、多人对战等。 ...
Cocos2d-lua是一款基于Cocos2d-x引擎的轻量级游戏开发框架,它将强大的C++底层引擎与灵活易用的Lua脚本语言相结合,为游戏开发者提供了一个高效、便捷的游戏开发平台。在“Cocos2d-x之Lua核心编程(第二版)_配套代码...
《Cocos2d-X by Example Beginner's Guide》是2013年由Packt Publishing出版的一本面向初学者的Cocos2d-X教程。Cocos2d-X是一个强大的、开源的游戏开发框架,支持跨平台开发,包括Android和iOS等移动设备。这本书...
cocos2d-x内置了存档和读档机制,如UserDefault用于存储用户设置和游戏进度,而FileUtils则提供了文件操作接口,便于处理游戏资源的本地存储和加载。 十、国际化与本地化 cocos2d-x支持多语言环境,开发者可以通过...
虽然它没有内置AI功能,但该项目的源代码提供了一个很好的学习平台,让开发者能够理解如何利用Cocos2d-x构建一个基本的棋类游戏。 Cocos2d-x是一款广泛使用的开源2D游戏开发框架,由C++编写,支持跨平台开发,包括...
cocos2d-x的核心功能包括精灵(Sprite)管理、场景(Scene)切换、动作(Action)设计、物理引擎支持、粒子系统、触摸事件处理、动画制作、定时器及调度、UI组件以及音频播放等。 在《Cocos2D-x权威指南》这本书中...
1. **渲染系统**:Cocos2d-x采用Sprite和Layer等概念,构建2D图形,支持精灵动画、粒子系统、骨骼动画等多种视觉效果。它还提供了强大的图层管理和场景管理机制,使得游戏世界构建更为便捷。 2. **物理引擎**:集成...
cocos2d-x提供了完善的动画框架,可以创建时间轴动画、序列化动作、粒子效果等,使得游戏中的角色和场景动态表现力十足。 七、事件处理 cocos2d-x的事件处理系统支持触摸、键盘、鼠标等多种输入设备的事件监听,...
首先,会介绍Cocos2d-x的基本概念,包括它的架构、渲染系统、物理引擎、动画和粒子效果等。理解这些基础知识是进行游戏开发的前提,它们为构建游戏场景和交互提供了坚实的基础。 接下来,书中会详细讲解Lua语言在...
Cocos2d-x是一款开源的游戏开发框架,广泛用于2D游戏、实时应用和互动媒体的制作。1.0.1-x-0.11.0是Cocos2d-x的一个版本,这个版本的手册提供了丰富的开发指导和参考资料,旨在帮助开发者理解和使用这个框架。 ...
1. **2D渲染**:COCOS2D-X提供了一套完善的2D渲染系统,包括精灵(Sprite)、纹理(Texture)、图层(Layer)、场景(Scene)等基本元素,以及动画、物理引擎、粒子系统等高级功能,能够帮助开发者轻松构建各种复杂...
【cocos2d-x高仿微信打飞机】是一款基于cocos2d-x游戏引擎开发的休闲射击游戏,模仿了微信内置的"飞机大战"。它为初学者提供了一个很好的实践平台,通过学习这款游戏的源代码,可以深入了解cocos2d-x引擎在实际项目...
6. **粒子系统(Particle System)**:内置的粒子系统允许开发者创建各种特效,如火、烟雾、星光等,增强游戏视觉表现。 7. **游戏性能优化**:2.2.0版本中包含了对多线程的支持,以及内存管理和渲染优化,有助于...
9. **粒子系统**:Cocos2d-x包含一个强大的粒子系统,可以生成各种复杂的粒子效果,如火焰、烟雾、雪花等,为游戏增添视觉特效。 10. **动画系统**:基于SpriteFrameCache和Animation类,Cocos2d-x可以轻松创建和...
《Cocos2d-X by Example Beginner's Guide-code》是一本专为初学者设计的Cocos2d-X游戏开发指南,其附带的代码文件旨在帮助读者深入理解和实践Cocos2d-X框架。Cocos2d-X是一个开源的游戏开发框架,基于C++,支持iOS...
cocos2d-x有内置的Texture Atlas工具,可以将多张图片合并成一张大图,减少加载时间和内存占用。 8. **调试与优化**:cocos2d-x提供了一系列的调试工具,如Profiler可以帮助我们找出性能瓶颈,优化代码。 在实际...
- **粒子系统**:讲解如何使用Cocos2D-x的粒子系统创建复杂视觉效果。 - **算法应用**:介绍如何将经典算法应用于游戏开发中,提高游戏性能。 - **内存管理与性能优化**:提供一系列技巧来减少内存占用并提高游戏...