重开发人员的劳动成果。转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485919

春雨惊春清谷天,夏满芒夏暑相连, 秋处露秋寒霜降,冬雪雪冬小大寒。

在大自然中,随处可见一些大规模运动的物体,比例如以下雨时的雨点、下雪时的雪花、爆炸时的火花。甚至旋转的星系、扩散的云雾等。

能够看下显微镜下的雪。是多么的美!

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFvbWVuZ3podQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

当我们希望在游戏中模拟这些大规模运动的物体时,通常有例如以下两种方法。

使用帧动画来模拟。
设计帧动画并把它渲染为图片序列来模拟特效,不但生成的动画体积庞大,也无法调整其运动參数,
而且还会失去其灵活性。

粒子效果的概念
我们把每个对象看做一个粒子,赋予它们一定的属性(比如外观、位置、速度、加速度和生存时间等)。
使它们依照一定的规律产生、运动并终于消失。

在粒子效果中。通常存在一个对全部粒子进行统一调度的引擎。称作粒子系统(partical system),
它负责粒子的产生。随时间改变粒子的状态。以及最后回收不再须要的粒子。

假设依照粒子系统的维数来区分。粒子系统能够分为二维粒子系统与三维粒子系统两种。


Cocos2d-x 3.0为我们提供的粒子系统由 ParticleSystem 类实现。

与其它的粒子引擎一样。ParticleSystem 实现了对粒子的控制与调度。对粒子的操作包含例如以下几种。
1、产生粒子:这部分也被称作粒子发射器(emitter)。
2、更新粒子状态:引擎会随时间更新粒子的位置、速度以及其它状态。

3、回收无效粒子:当粒子的生存周期结束后,就会被系统回收。

因此。为了创建一个粒子效果,我们须要定义粒子怎样产生以及状态怎样改变。

ParticleSystem 提供了多种初始化方式。 
我们能够通过指定粒子数量来创建一个粒子系统, 然后须要设置粒子的外观 (通常为一张小纹理)、发射方式与运动方式。
创建一个全新的粒子系统通常较为烦琐,大多数情况下。我们更乐意把粒子系统的參数保存在文件里,
而 Cocos2d-x 就是使用 Plist 文件来保存这些參数的。
临时抛开粒子效果文件 Plist 不谈,假设我们已经拥有一个粒子效果文件,就能够利用
ParticleSystem 的初始化方法直接从文件里导入一个粒子效果。相关代码例如以下:
static ParticleSystem * create(const std::string& plistFile);

Plist 文件实质上是一个 XML 文件,我们能够利用不论什么文本编辑器来创建或改动。
为了创建一个新的粒子效果。我们能够从Cocos2d-x 的測试例子文件夹下找到一个现有的粒子系统 Plist 文件,改动再使用。


实际上,引擎已经内置了若干粒子效果,它们作为粒子系统的例子,仅仅须要简单的几行代码就能够创建。
内置的几种粒子效果
ParticleFire                火焰效果
ParticleSun                  太阳效果
ParticleExplosion            爆炸效果
ParticleSnow                 雪花效果

粒子系统继承自Node,能够被加入到其它节点之中。
在游戏中显示一个粒子效果十分简单。

直接把以下的代码加入到游戏场景的初始化方法中,给游戏场景加入一个雪花效果。就可以营造一种冬日氛围。
准备好一张雪花图片 snow.png,并在GameScene::init 方法中加入下面代码:
  ParticleSnow *snow = ParticleSnow::create();
snow->setPosition(Point(480,670));
snow->setTextureWithRect(Director::getInstance()->getTextureCache()->addImage("snow.png"),Rect(0,0,32,32));
addChild(snow);
成功加入后,就能够看到雪花漫天飘舞的效果了。


对于不论什么粒子系统,Texture 都是一个必须设置的属性,粒子系统中的每个粒子都使用此纹理渲染出来。

在这个样例中,每个粒子都被赋予雪花纹理,因此能够呈现出雪花飘落的效果。

创建一个全新的粒子效果须要设定的參数过于繁杂,我们全然能够利用引擎内置的粒子
演示样例来实现一个粒子效果: 首先找到一个与期望效果类似的粒子效果, 然后改动纹理, 微调參数。


以下我们以 ParticleSnow 为例,展示它是怎样设置參数的:
bool ParticleSnow::initWithTotalParticles(int numberOfParticles)
{
if( ParticleSystemQuad::initWithTotalParticles(numberOfParticles) )
{
// duration
//时间间隔
_duration = DURATION_INFINITY; // set gravity mode.
//设置为重力模式
setEmitterMode(Mode::GRAVITY); // Gravity Mode: gravity
//重力模式參数: 重力
setGravity(Point(0,-1)); // Gravity Mode: speed of particles
//重力模式參数: 粒子速度
setSpeed(5);
setSpeedVar(1); // Gravity Mode: radial
//重力模式參数: 径向加速度
setRadialAccel(0);
setRadialAccelVar(1); // Gravity mode: tangential
//重力模式參数: 切向加速度
setTangentialAccel(0);
setTangentialAccelVar(1); // emitter position
//粒子发射器位置
Size winSize = Director::getInstance()->getWinSize();
this->setPosition(Point(winSize.width/2, winSize.height + 10));
setPosVar(Point(winSize.width/2, 0)); // angle
//角度
_angle = -90;
_angleVar = 5; // life of particles
//粒子的生命时间
_life = 45;
_lifeVar = 15; // size, in pixels
//尺寸(以像素为单位)
_startSize = 10.0f;
_startSizeVar = 5.0f;
_endSize = START_SIZE_EQUAL_TO_END_SIZE; // emits per second
//每秒发射粒子数
_emissionRate = 10; // color of particles
//粒子着色
_startColor.r = 1.0f;
_startColor.g = 1.0f;
_startColor.b = 1.0f;
_startColor.a = 1.0f;
_startColorVar.r = 0.0f;
_startColorVar.g = 0.0f;
_startColorVar.b = 0.0f;
_startColorVar.a = 0.0f;
_endColor.r = 1.0f;
_endColor.g = 1.0f;
_endColor.b = 1.0f;
_endColor.a = 0.0f;
_endColorVar.r = 0.0f;
_endColorVar.g = 0.0f;
_endColorVar.b = 0.0f;
_endColorVar.a = 0.0f; Texture2D* texture = getDefaultTexture();
if (texture != nullptr)
{
setTexture(texture);
} // additive
//禁用线性叠加混合模式
this->setBlendAdditive(false);
return true;
}
return false;
}

粒子编辑器
windows上的一款粒子编辑器。叫做cocos2d-windows-particle-editor

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFvbWVuZ3podQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


简单使用概述与说明:

File:save,save as(导出plist文件),new,Open

Samples:有test里面的一些样例,临时版本号没有添加自己加入纹理进来功能

编辑器功能说明:

半径模式:这样的仅仅有环绕中心运动。这个以下的參数要有效

编辑器:IsBackgroundMove背景是否动。Scale缩放

大小:粒子的開始大小和结束大小

角度:粒子的运动方向...(-90)垂直朝下

生命:粒子生命

位置:设置PosVar值,SourcePosition不用管..设置资源的

纹理渲染:对于普通情况,仅仅须要记住:“我们最常使用的CC_BLEND_SRC和CC_BLEND_DST分别相应GL_ONE和GL_ONE_MINUS_SRC_ALPHA”。

颜色:StartColor, EndColor, StartColorVar, EndColorVar这4个属性代表着粒子的初始颜色、结束颜色以及其浮动值。

重力模式:重力、速度等的设置

自旋:粒子的旋转

EmissionRate:粒子的发射速率。即每秒发射的粒子数量。

郝萌主友情提示:
发挥自己的想象力,创建属 于自己的与众不同的粒子效果、、、

23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?的更多相关文章

  1. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  2. 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具 ...

  3. 1、Cocos2dx 3.0游戏开发找小三之前言篇

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  4. 3、Cocos2dx 3.0游戏开发找小三之搭建开发环境

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27107295 搭建开发环境 使用 Cocos2d- ...

  5. 12、Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706303 生命周期分析 在前面文章中我们执行了第 ...

  6. 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...

  7. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

  8. 18、Cocos2dx 3.0游戏开发找小三之cocos2d-x,请问你是怎么调度的咩

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478251 Cocos2d 的一大特色就是提供了事 ...

  9. 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 Hello World 分析 打开新 ...

随机推荐

  1. PHP中遍历stdclass object 及 json 总结[中国航天神舟十号以json形式向地面返回数据]

    $test=Array ( [0] => stdClass Object ( [tags] => 最快的车,Bloodhound,SSC [id] => 48326888 11 从网 ...

  2. fzu 1913 Easy Comparison(字符串)

    题目链接:fzu 1913 Easy Comparison 题目大意:给出一个字符串,计算与它按照字典序排序排列后的字符串有多少个位置不同. 解题思路:水体,sort一下,然后遍历一遍就好. #inc ...

  3. Qt4_VS10 程序打包发布

    源地址:http://www.2cto.com/kf/201306/217205.html 目录结构如下: ---------------------------------------------- ...

  4. 80 多个 Linux 系统管理员必备的监控工具

    随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 ...

  5. MFC为应用程序添加托盘(右键托盘,弹出菜单)

    源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1.       导入一个托盘图标的资源(.ico)格式:资源ID为IDI_ICON1 2 ...

  6. FZOJ2110: Star

    Problem Description Overpower often go to the playground with classmates. They play and chat on the ...

  7. appium 真机测试问题 出现 instruments crashed on startup

    1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...

  8. Struts2通过自己定义拦截器实现登录之后跳转到原页面

    这个功能对用户体验来说是非常重要的.实现起来事实上非常easy. 拦截器的代码例如以下: package go.derek.advice; import go.derek.entity.User; i ...

  9. C++ 虚函数表解析(比较清楚,还可打印虚函数地址)

    C++ 虚函数表解析 陈皓 http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父 ...

  10. java面向对象下:Java数据库编程

    19.Java数据库编程: JDBC概述:        JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...