Cocos2d粒子系统二
- 粒子的发射速度
- 重力模式(模式A):
- 重力
- 方向
- 速度 +- 变动
- 切向加速度 +- 变动
- 径向加速度 +- 变动
- 半径模式(模式B):
- 开始半径 +- 变动
- 结束半径 +- 变动
- 旋转 +- 变动
- 所有模式的公用属性:
- 生命
- 开始旋转
- 结束旋转
- 开始尺寸
- 结束尺寸
- 开始颜色
- 结束颜色
- 生命
- 合成函数
- 质感
- 粒子旋转(适用于ParticleSystemQuad)
- 正切加速度(重力模式)
- 径向加速度(重力模式)
- 半径方向(半径模式)(Particle Designer只支持向外和向内的方向)
- emitter.radialAccel = 15;
- emitter.startSpin = 0;
不同的地方:
Cocos2d-x-2.x | Cocos2d-x-3.x |
---|---|
kCCParticleDefaultCapacity |
kParticleDefaultCapacity |
ParticleSystem::Mode kCCParticleModeGravity |
ParticleSystem::Mode::GRAVITY |
ParticleSystem::Mode kCCParticleModeRadius |
ParticleSystem::Mode::RADIUS |
N/A | typedef ParticleSystem::PositionType tPositionType |
kCCPositionTypeFree /kPositionTypeFree |
ParticleSystem::PositionType::FREE |
kCCPositionTypeRelative /kPositionTypeRelative |
ParticleSystem::PositionType::RELATIVE |
kCCPositionTypegRrouped /kPositionTypegRrouped |
ParticleSystem::PositionType::GROUPED |
kCCParticleDurationInfinity /kParticleDurationInfinity |
ParticleSystem::DURATION_INFINITY |
kCCParticleStartSizeEqualToEndSize /kParticleStartSizeEqualToEndSize |
ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE |
kCCParticleStartRadiusEqualToEndRadius /kParticleStartRadiusEqualToEndRadius |
ParticleSystem::START_RADIUS_EQUAL_TO_END_RADIUS |
- 20多个内联函数定义在头文件中用来取代像CC_PROPERTY(varType, varName, funName)和CC_PROPERTY_READONLY(varType, varName, funName)这样的宏
Cocos2d-x-2.x | Cocos2d-x-3.x |
---|---|
CC_PROPERTY(int, m_nEmitterMode, EmitterMode) |
Mode _emitterMode; inline Mode getEmitterMode() const { return _emitterMode; }; inline void setEmitterMode(Mode mode) { _emitterMode = mode; }; |
CC_PROPERTY(CCParticleBatchNode*, m_pBatchNode, BatchNode) |
ParticleBatchNode* _batchNode; virtual ParticleBatchNode* getBatchNode() const; virtual void setBatchNode(ParticleBatchNode* batchNode); |
CC_PROPERTY_READONLY(unsigned int, m_uParticleCount, ParticleCount) |
int _particleCount; inline unsigned int getParticleCount() const { return _particleCount; }; |
CC_PROPERTY(float, m_fDuration, Duration) |
float _duration; inline float getDuration() const { return _duration; }; inline void setDuration(float duration) { _duration = duration; }; |
CC_PROPERTY_PASS_BY_REF(CCPoint, m_tSourcePosition, SourcePosition) |
Point _sourcePosition; inline const Point& getSourcePosition() const { return _sourcePosition; }; inline void setSourcePosition(const Point& pos) { _sourcePosition = pos; }; |
CC_PROPERTY_PASS_BY_REF(CCPoint, m_tPosVar, PosVar) |
Point _posVar; inline const Point& getPosVar() const { return _posVar; }; inline void setPosVar(const Point& pos) { _posVar = pos; }; |
CC_PROPERTY(float, m_fLife, Life) |
float _life; inline float getLife() const { return _life; }; inline void setLife(float life) { _life = life; }; |
CC_PROPERTY(float, m_fLifeVar, LifeVar) |
float _lifeVar; inline float getLifeVar() const { return _lifeVar; }; inline void setLifeVar(float lifeVar) { _lifeVar = lifeVar; }; |
CC_PROPERTY(float, m_fAngle, Angle) |
float _angle; inline float getAngle() const { return _angle; }; inline void setAngle(float angle) { _angle = angle; }; |
CC_PROPERTY(float, m_fAngleVar, AngleVar) |
float _angleVar; inline float getAngleVar() const { return _angleVar; }; inline void setAngleVar(float angleVar) { _angleVar = angleVar; }; |
CC_PROPERTY(float, m_fStartSize, StartSize) |
float _startSize; inline float getStartSize() const { return _startSize; }; inline void setStartSize(float startSize) { _startSize = startSize; }; |
CC_PROPERTY(float, m_fStartSizeVar, StartSizeVar) |
float _startSizeVar; inline float getStartSizeVar() const { return _startSizeVar; }; inline void setStartSizeVar(float sizeVar) { _startSizeVar = sizeVar; }; |
CC_PROPERTY(float, m_fEndSize, EndSize) |
float _endSize; inline float getEndSize() const { return _endSize; }; inline void setEndSize(float endSize) { _endSize = endSize; }; |
CC_PROPERTY(float, m_fEndSizeVar, EndSizeVar) |
float _endSizeVar; inline float getEndSizeVar() const { return _endSizeVar; }; inline void setEndSizeVar(float sizeVar) { _endSizeVar = sizeVar; }; |
CC_PROPERTY_PASS_BY_REF(ccColor4F, m_tStartColor, StartColor) |
Color4F _startColor; inline const Color4F& getStartColor() const { return _startColor; }; inline void setStartColor(const Color4F& color) { _startColor = color; }; |
CC_PROPERTY_PASS_BY_REF(ccColor4F, m_tStartColorVar, StartColorVar) |
Color4F _startColorVar; inline const Color4F& getStartColorVar() const { return _startColorVar; }; inline void setStartColorVar(const Color4F& color) { _startColorVar = color; }; |
CC_PROPERTY_PASS_BY_REF(ccColor4F, m_tEndColorVar, EndColorVar) |
Color4F _endColorVar; inline const Color4F& getEndColor() const { return _endColor; }; inline void setEndColor(const Color4F& color) { _endColor = color; }; |
CC_PROPERTY(float, m_fStartSpin, StartSpin) |
float _startSpin; inline float getStartSpin() const { return _startSpin; }; inline void setStartSpin(float spin) { _startSpin = spin; }; |
CC_PROPERTY(float, m_fStartSpinVar, StartSpinVar) |
float _startSpinVar; inline float getStartSpinVar() const { return _startSpinVar; }; inline void setStartSpinVar(float pinVar) { _startSpinVar = pinVar; }; |
CC_PROPERTY(float, m_fEndSpin, EndSpin) |
float _endSpinVar; inline float getEndSpin() const { return _endSpin; }; inline void setEndSpin(float endSpin) { _endSpin = endSpin; }; |
CC_PROPERTY(float, m_fEndSpinVar, EndSpinVar) |
float _endSpinVar; inline float getEndSpinVar() const { return _endSpinVar; }; inline void setEndSpinVar(float endSpinVar) { _endSpinVar = endSpinVar; }; |
CC_PROPERTY(float, m_fEmissionRate, EmissionRate) |
float _emissionRate; inline float getEmissionRate() const { return _emissionRate; }; inline void setEmissionRate(float rate) { _emissionRate = rate; }; |
CC_PROPERTY(unsigned int, m_uTotalParticles, TotalParticles) |
int _totalParticles; virtual int getTotalParticles() const; virtual void setTotalParticles(int totalParticles); |
CC_PROPERTY(CCTexture2D*, m_pTexture, Texture) |
Texture2D* _texture; virtual Texture2D* getTexture() const override; virtual void setTexture(Texture2D *texture) override; |
CC_PROPERTY(ccBlendFunc, m_tBlendFunc, BlendFunc) |
BlendFunc _blendFunc; virtual void setBlendFunc(const BlendFunc &blendFunc) override; virtual const BlendFunc &getBlendFunc() const override; |
CC_PROPERTY(bool, m_bOpacityModifyRGB, OpacityModifyRGB) |
bool _opacityModifyRGB; inline void setOpacityModifyRGB(bool opacityModifyRGB) { _opacityModifyRGB = opacityModifyRGB; }; inline bool isOpacityModifyRGB() const { return _opacityModifyRGB; }; CC_DEPRECATED_ATTRIBUTE inline bool getOpacityModifyRGB() const { return isOpacityModifyRGB(); } |
CC_PROPERTY(tCCPositionType, m_ePositionType, PositionType) |
PositionType _positionType; inline PositionType getPositionType() const { return _positionType; }; inline void setPositionType(PositionType type) { _positionType = type; }; |
CC_SYNTHESIZE(unsigned int, m_uAtlasIndex, AtlasIndex) |
int _atlasIndex; inline int getAtlasIndex() const { return _atlasIndex; }; inline void setAtlasIndex(int index) { _atlasIndex = index; }; |
- 在3.x中新增了两个属性std::string _configName;和int _yCoordFlipped;
CCParticleSystemQuad和ParticleSystemQuad
相似的地方:
- 粒子尺寸可为任意float值;
- 系统可以缩放;
- 粒子可以旋转;
- 支持subrects(不知道怎么译,“子矩”自己看了都不懂)
- 从1.1版本开始支持批量渲染
不同的地方:
例子:
- 下面是ParticleSystem的例子:
/*
// Cocos2d-x-2.x
CCSize size = CCDirector::sharedDirector()->getWinSize();
ParticleSystemQuad* m_emitter = ParticleSystemQuad::createWithTotalParticles(900);
m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));
*/
// Cocos2d-x-3.x
auto size = Director::getInstance()->getWinSize();
auto m_emitter = ParticleSystemQuad::createWithTotalParticles(900);
m_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("fire.png")); //The code below we can use both in 2.x and 3.x
m_emitter->setDuration(-1);
m_emitter->setGravity(Point(0, -240)); // in Cocos2d-x-2.x CCPoint(0, -240) is used
m_emitter->setAngle(90);
m_emitter->setAngleVar(360);
m_emitter->setRadialAccel(50);
m_emitter->setRadialAccelVar(0);
m_emitter->setTangentialAccel(30);
m_emitter->setTangentialAccelVar(0);
m_emitter->setPosition(Point(size.width / 2, size.height));
m_emitter->setPosVar(Point(400, 0));
m_emitter->setLife(4);
m_emitter->setLifeVar(2);
m_emitter->setStartSpin(30);
m_emitter->setStartSpinVar(60);
m_emitter->setEndSpin(60);
m_emitter->setEndSpinVar(60);
m_emitter->setStartColor(Color4F(255,255,255,1));
m_emitter->setStartColorVar(Color4F(0,0,0,0));
m_emitter->setEndColor(Color4F(255, 255, 255, 1));
m_emitter->setEndColorVar(Color4F(0, 0, 0, 0));
m_emitter->setStartSize(30);
m_emitter->setStartSizeVar(0);
m_emitter->setEndSize(20.0f);
m_emitter->setEndSizeVar(0);
m_emitter->setEmissionRate(100);
addChild(m_emitter,10);
- 你也可以使用下面这些牛B的子类来轻易创建一些常用的粒子效果
- ParticleExplosion, ParticleFire, ParticleFireworks, ParticleFlower, ParticleGalaxy, ParticleMeteor, ParticleRain, ParticleSmoke, ParticleSnow, ParticleSpiral, ParticleSun
Cocos2d粒子系统二的更多相关文章
- cocos2D(二)---- cocos2D文档的使用
在使用cocos2d进行游戏开发的过程中,难免要查阅cocos2d的API文档.搞清楚怎么使用某个类或者某个方法.幸运的是,cocos2d的作者已经在源码里面加入了文档凝视,我们仅仅须要使用文档生成工 ...
- 【Cocos2D研究院之游戏开发】
http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Co ...
- 初学Cocos2dx
初学cocos2dx Cocos2dx 中的主要概念包括:应用.导演.场景.层.精灵.动画.动作. Cocos2dx里面的主要类 1.CCObject Object Object Object 是co ...
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...
- 粒子系统(二):Canvas绘制精美图案
准备 IDE:Visual Studio Code Language:JavaScript / ECMAScript 6+ GitHub:Natural2D.JS 本文主要讲述 Particles - ...
- cocos2d-x开发记录:二,基本概念(粒子系统,Scheduler和定时器)
七,粒子系统 1.导言 术语粒子系统是指计算机图形学技术,它使用大量非常小的精灵或其他图形对象来模拟某些种类的“模糊”现象,于传统渲染技术相比,它很难复制.通常是高度混沌无序的系统,自然现象.化学反应 ...
- 【Cocos2d入门教程二】Cocos2d-x基础篇
上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: a.环境设定(帧率 初始化ope ...
- Cocos2d—X游戏开发之CCScrollView(滑动视图)(十二)
CCScrollView在Cocos2d-X引擎中主要使用在图片尺寸远大于屏幕尺寸的时候使用. 总体来说,使用起来比较简单. 一个是CCScrollView控件本身,一个是CCScrollViewDe ...
- Cocos2d-x3.0模版容器具体解释之二:cocos2d::Map<K,V>
1.概述: 版本号: v3.0 beta 语言: C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCMap.h" 的头文件里 ...
随机推荐
- POJ 2774 最长公共子串
一定好好学SAM...模板在此: #include<iostream> #include<cstdio> #include<cmath> #include<a ...
- COJ 1008 WZJ的数据结构(八) 树上操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...
- [Java] 垃圾回收 ( Garbage Collection ) 的步骤演示
关于 JVM 垃圾回收机制的基础内容,可参考上一篇博客 垃圾回收机制 ( Garbage Collection ) 简介 上一篇博客,介绍了堆的内存被分为三个部分:年轻代.老年代.永生代.这篇博文将演 ...
- AES - Rijndael 算法(二)
三:Rijndael算法实现(C++版本) /*-------------------- Rijndael round subkeys ---------------------*/u8 roundK ...
- Linux 上使用 Gmail SMTP 服务器发送邮件通知
导读 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm ...
- Java8 时间 API
前言 Java8 中最为人津津乐道的新改变恐怕当属函数式 API 的加入.但实际上,Java8 所加入的新功能远不止这个. 本文将基于<Java SE8 for the Really Impat ...
- WebLogic简单的备份和恢复
万一发生故障,为了迁移或者恢复WebLogic域,应定期地备份管理服务器机器上的整个域目录树.这样,只需恢复域目录并重启管理服务器就可以使服务器从硬件或者系统故障中恢复.在WebLogic生产域中,需 ...
- struts2中修改Action后刷新浏览器后不能及时更新
在学习strut2的时候,发现如果修改配置文件中Action的时候,刷新浏览器并不能加载修改后的Action,只能关闭服务,重新开启server才能获取到,上网找了许多资料后发现只要在配置文件中加上下 ...
- TeamViewer或者向日葵等无法成功远程登录
之前一直能正常远程的两台电脑,今天不知道什么原因,莫名其妙的就无法登录了. 更悲催的时,今天早上走的时候,忘把TeamViewer或者向日葵软件启动了. 还好,我登录向日葵官网,在管理中心设置里面开启 ...
- 自然数e这家伙怎么蹦跶出来的?
自然数e这家伙怎么蹦跶出来的? 之前看过一篇中文介绍自然数e的blog,引起了我的兴趣 原文是阮一峰大牛(我认为必须很有必要尊敬的称,大牛)嚼烂了吐出来的哈哈,只是我认为还是自己去看原文比較好 感觉非 ...