温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?

23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?

发布时间:2020-07-03 01:21:24 来源:网络 阅读:417 作者:danielzzu 栏目:开发技术
重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485919

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

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

可以看下显微镜下的雪,是多么的美!

23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?


当我们希望在游戏中模拟这些大规模运动的物体时,通常有如下两种方法。
使用帧动画来模拟。
设计帧动画并把它渲染为图片序列来模拟特效,不但生成的动画体积庞大,也无法调整其运动参数,
并且还会失去其灵活性。

粒子效果的概念
我们把每一个对象看做一个粒子,赋予它们一定的属性(例如外观、位置、速度、加速度和生存时间等),
使它们按照一定的规律产生、运动并最终消失。
在粒子效果中,通常存在一个对所有粒子进行统一调度的引擎,称作粒子系统(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);  
成功添加后,就可以看到雪花漫天飘舞的效果了。
23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?

对于任何粒子系统,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
开源地址: http://code.google.com/p/cocos2d-windows-particle-editor/
23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?

23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?
简单使用概述与说明:

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:粒子的发射速率,即每秒发射的粒子数量。


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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI