重开发人员的劳动成果。转载的时候请务必注明出处: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. RHEL Server 6.3下MySQL5.5.25a源码安装

    OS:RHEL Server 6.3 MySQL:mysql-5.5.25a.tar.gz 相关依赖包: ncurses-5.9.tar.gz bison-2.5.tar.gz 安装MySQL 一.安 ...

  2. HTTP协议--简析

    HTTP--超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,是所有的www文件都必须遵守的标准. 要想成为优秀的web开发人员,必须熟悉H ...

  3. 用DELPHI的RTTI实现数据集的简单对象化

    在<强大的DELPHI RTTI--兼谈需要了解多种开发语言>一文中,我说了一下我用DELPHI的RTTI实现了数据集的简单对象化.本文将详细介绍一下我的实现方法.     首先从一个简单 ...

  4. 日本IT工作有感

    不知不觉,在日本关西已经呆了快一个月了. 除了饮食有点不是非常习惯.其他感觉都还好. 日本这边的文化还是非常偏向project师的,project师的社会地位非常高,公司里面也没有国内所谓35岁的焦虑 ...

  5. android面试题目大全<完结部分>,android笔试题目集锦

    1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存   B.内存回收程序负责释放无用内存    C.内存回收程序允许程序员直接释放内存    D.内存回收 ...

  6. 报错消息写在AT SELECTION-SCREEN OUTPUT和START-OF-SELECTION事件下的区别

    今天面试没答上来的问题,其实我是知道的,以前也遇到过.... START-OF-SELECTION下的话会在左下角报错 AT SELECTION-SCREEN OUTPUT消息会弹出框,然后点击就没有 ...

  7. Delphi安装NT服务程序时(不出现提示信息)

    如果我们不加上"/silent",那么Delphi在安装和卸载NT服务程序时候,都会出现一个提示信息,不希望出现这个提示信息,那么使用如下命令: 1,安装:“你的nt程序 /ins ...

  8. poj2418 map 快排水过

    /*计算每个单词的百分比按字典序输出*/ #include <cstdio>#include<cstdlib>#include <cstring>#include ...

  9. 数学之路-python计算实战(2)-初遇pypy

    PyPy是Python开发人员为了更好的Hack Python创建的项目.此外,PyPy比CPython是更加灵活,易于使用和试验,以制定详细的功能在不同情况的实现方法,能够非常easy实施. 该项目 ...

  10. Find the minimum线段树成段更新

    问题 G: Find the minimum 时间限制: 2 Sec   内存限制: 128 MB 提交: 83   解决: 20 [ 提交][ 状态][ 讨论版] 题目描述 Given an int ...