zoukankan      html  css  js  c++  java
  • 粒子效果

    第15章

    粒子系统

    15.1  粒子系统简介

    粒子系统在游戏中被大量应用,我们主要将其应用于游戏特效,它能够极大的提高游戏地画面观感。有时,我们使用帧动画来为精灵添加动画,并且使用帧动画也可以实现特效的效果,但是其缺点也很明显。

    (1)画面效果弱,有时要想实现一个大范围的爆炸,还需要美工做很多事情。

    (2)细节不自然,在视觉上没有变化,模式比较僵硬

    (3)画面制作成本比较高。

    以前,手机性能不强时,使用粒子系统是非常耗费资源的。现在,手机硬件配置和软件支持(OpenGL)的大幅度强化,使强大的粒子系统有了展示的机会。下面我们就来介绍粒子系统。

    15.2  粒子系统的生命周期

    作为一个对象,粒子存在于引擎当中,其一旦诞生就要经历一个完整的生命周期:出生、成长及死亡。

    首先,在引擎中存在一个粒子池,用于存放等待复活的粒子,发射器会从粒子池中获取一个粒子,然后计算赋予的初始属性,将粒子发射出去,粒子诞生。

    其次,粒子发射出去后,衰减器会在粒子的运动过程中,不断地刷新来修改其属性,这就是粒子成长的过程。

    最后,粒子死亡后,回归粒子池。等待重新被激活。

    15.3  粒子的相关属性

    粒子的常见属性有位置、颜色、尺寸及旋转等,我们需要的效果通过单个粒子是实现不了的,需要一个能产生粒子的发射器以发射很多的粒子。

    15.4  发射器的相关属性

    发射器有两种:一种是重力发射器(用于实现在重力条件下的粒子运动);另一种是放射发射器(用于实现在无重力条件下的粒子运动)。在Cocos2d-x中,我们使用ParticleSystem来设置发射器的属性,下面看一下发射器的常见属性。

    代码清单16-1:

    struct {

             Vec2 gravity;                //重力和方向的向量

             float speed;                 //速度

             float speedVar;              //粒子的速度差异

             float tangentialAccel;       //粒子的切线加速度

             float tangentialAccelVar;    //粒子间的切线加速度差异

             float radialAccel;           //粒子的径向加速度

             float radialAccelVar;        //粒子间的径向加速度差异

             bool rotationIsDir;

     } modeA; 

    struct {   float startRadius;          //粒子开始半径

                 float startRadiusVar;     //粒子间开始半径差异

                 float endRadius;          //粒子结束半径

                 float endRadiusVar;       //粒子间结束半径差异

                 float rotatePerSecond;    //粒子每秒的旋转角度

                 float rotatePerSecondVar; //粒子间每秒的旋转角度差异

    } modeB;

    粒子系统的多样性,依靠的是自身众多属性的配置,如果用代码来进行各项配置,那么对我们来说将是一个极大的考验,因此,一些开发者制作了粒子编辑器。接下来介绍一款简单的粒子编辑器——Particle Designer的使用方法。

    Particle Designer是一款专门为Cocos2d开发的粒子编辑器,我们可以在 http://particledesigner.71squared.com下载试用版。试用版有一些限制,不能保存,因此,你可以选择购买正式版,价格约7.99美元。下面我们看一下该软件的界面,如图15-1所示。

     

    图15-1  ParticleDesigner界面

     

    图15-2  ParticleDesigner属性调整界面

    使用该软件的最大好处就是通过直观的方式来修改粒子的各种属性,如图15-2红色区域所示,省去了开发者单独调试的时间,并且可以在模拟器视图中同步地看到粒子属性修改所带来的变化,设计完成后我们可以将其导出以便在自己应用程序中使用。

    15.5  在代码中使用粒子效果

    设计完成粒子效果之后,可以将其保存为plist文件,plist文件就是将粒子系统所需要的参数以XML的形式组装起来。Cocos2d-x直接支持plist作为粒子系统的参数,并且提供了非常多的粒子系统效果:

    ◎        ParticleSystem(所有粒子系统的父类)

    ◎        -- ParticleExplosion (爆炸粒子效果)

    ◎        -- ParticleFireworks(烟花粒子效果)

    ◎        -- ParticleFire(火焰粒子效果)

    ◎        -- ParticleFlower (花束粒子效果)

    ◎        -- ParticleGalaxy(星系粒子效果)

    ◎        -- ParticleMeteor(流星粒子效果)

    ◎        -- ParticleSpiral(漩涡粒子效果)

    ◎        -- ParticleSnow(雪粒子效果)

    ◎        -- ParticleSmoke(烟粒子效果)

    ◎        -- ParticleSun (太阳粒子效果)

    ◎        -- ParticleRain (雨粒子效果)

    下面介绍如何在项目中使用我们导出的文件。

    第一步,使用我们自己导出的文件,如代码清单15-2所示。

    代码清单15-2:

    //Boom.plist文件是我们导出的文件

    auto sy=ParticleSystemQuad::create ("Boom.plist");

    //设置单个粒子的纹理

    sy->setTextureWithRect(Director::getInstance()->getTextureCache()->addImage(“fire.png”) );

    sy->setBlendAdditive(true);//这个调用必不可少

    sy->setPosition(Point(200,200));//设置位置

    sy->setDuration(2);//设置持续时间

    addChild(sy);//添加粒子效果

    sy->setAutoRemoveOnFinish(true);//播放完之后自动移除

    第二步,使用系统提供的粒子效果,以下雪ParticleSnow和ParticleRain为例子讲解,如代码清单15-3所示。

    代码清单15-3:

    auto snow = ParticleSnow::create();

    snow->setTexture(Director::getInstance()->getTextureCache()->addImage(“fire.png”));

        snow->setPosition(Vec2( 450, 840));

        snow->setTotalParticles(130);

        snow->setLife(5.0f);

        this->addChild(snow);

     

      //雨

        auto rain = ParticleRain::create();

        rain->setTexture(Director::getInstance()->getTextureCache()->addImage(fire.png));

        rain->setPosition(Vec2( 450, 940));

        rain->setTotalParticles(130);

        rain->setLife(5.0f); 

        this->addChild(rain);

    好了,对于粒子系统我们先讲解这么多,不再详述其他属性,有兴趣的读者可以深入研究,以开发出具有超棒效果的应用程序。

    15.6  小结

    本章我们主要讲解了粒子系统的使用,包括粒子工具的制作和其在代码中的使用方法。希望大家能掌握常见的属性,熟练地制作方法需要的粒子效果。另外,对于系统中提供的常见粒子效果我们也必须掌握,这些效果虽然简单,却有利于我们队其进行使用。

     

    资源安装文件-Mac os 联系作者Email:1911398892@qq.com

     

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    多个相同结构的表的字段的修改、添加
    SQL SERVER 查询去重 PARTITION BY
    message from server: "Host 'xxx' is not allowed to connect to th
    jdk 1.8 连接数据库
    恢复SQLServer数据库后,如何同步登陆名和用户名
    无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
    jquery.tablesorter 使用
    MD5加密
    C# 判断是否是节假日
    word ladder
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4616331.html
Copyright © 2011-2022 走看看