• 七、cocos2dx之粒子系统


    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=66

    一、介绍

    粒子系统指的是一个使用大量很小的精灵或者其他的一些绘制对象模拟一些模糊效果。使用传统的绘制技术很难实现。它们经常被用到一些混乱系统,自然现象以及一些化学反应动画效果中。

     

    二、点vs矩形

    在之前版本的cocos2dx中,有两种类型的粒子系统:矩形和点阵粒子系统:

    1)CCParticleSystemQuad

    2)CCParticleSystemPoint

    CCParticleSystemQuad有一些额外的特点而CCParticleSystemPoint不支持:

    1)旋转粒子系统:粒子们能够围绕轴线旋转,而CCParticleSystemPoint没有这个属性

    2)粒子们有大小。而在CCParticleSystemPoint中,如果粒子尺寸大于64,那么将会被当成64

    3)整个系统可以被缩放,可以使用缩放属性

    因为CCParticleSystemPoint不支持CCParticleBatchNode,所以它被从cocos2dx粒子系统中移除掉了(囧)。

    三、CCParticleBatchNode

    一个CCParticleBatchNode 能够引用一个纹理并且只有一个纹理(一个图片文件)。只有被包含在纹理中的CCParticleSystems可以被添加到CCSpriteBatchNode。被添加到CCSpriteBatchNode 中的CCParticleSystems在一个OpenGL ES绘制中调用。如果 CCParticleSystems没有被添加进一个CCParticleBatchNode,那么每一个粒子系统都需要被OpenGL ES绘制一次,那样效率就很低了。

    创建一个矩形粒子系统

    CCParticleSystemQuad* m_emitter = newCCParticleSystemQuad();
    m_emitter = CCParticleFire::create();
    

      

    四、重力vs半径模式

    重力模式


    重力模式能够让粒子飞向或者远离一个中心点。这种的优势是它允许一个动态的,组织的效果。你可以用如下代码设置重力模式:

    //重力模式
    this->m_nEmitterMode = kCCParticleModeGravity;
    
    this->modeA.gravity = ccp(0,-90);
    

      

    在重力模式中,以下属性是合法的:

    gravity (Point)。粒子系统的重力。

    speed (float)。粒子们射出的速度。

    speedVar(float)速度变量

    tangencialAccel(float)粒子们的正切加速度

    tangencialAccelVar(float)粒子们正切加速度的变量

    radialAccel(float)粒子们的半径加速度。

    radialAccelVar(float)粒子们半径加速度的变量

    半径模式


    半径模式能够让粒子在圆中旋转。也可以创造螺旋模式能让粒子向屏幕里屏幕外飞。你可以设置半径模式用下面的几行代码:

    // 半径模式
    this->m_nEmitterMode = kCCParticleModeRadius;
    // 设置开始半径
    this->modeB.startRadius = 0;
    this->modeB.startRadiusVar = 0;//ccp(0,0);
    

      

     

    半径模式有下列合法的属性:
    startRadius (a float).粒子的开始半径

    startRadiusVar (a float). 开始半径变量
    endRadius (a float). 粒子的结束半径
    endRadiusVar (a float).结束半径变量
    rotatePerSecond (a float).围绕一个来源点的每秒旋转角度
    rotatePerSecondVar (a float).每秒旋转角度变量

    粒子们的常规属性:

    startSize:粒子的初始尺寸(像素值)
    startSizeVar
    endSize:粒子的结束尺寸(如果你想让粒子的开始大小同结束大笑相同,就用一下kCCParticleStartSizeEqualToEndSize
    endSizeVar
    startColor :粒子开始颜色(ccColor4F)
    startColorVar
    endColor :粒子结束颜色
    endColorVar
    startSpin:仅用在CCParticleSystemQuad中,起始螺旋度
    startSpinVar
    endSpin:仅用在CCParticleSystemQuad中,结束螺旋度
    endSpinVar
    life粒子的生命生存时间,单位是秒
    lifeVar
    angle:粒子开始角度,float
    angleVar
    positon:CCPoint粒子位置
    positonVar
    centerOfGravity :CGPoint

    系统通用属性:

    emissionRate duration (a float):每秒有多少粒子被发射

    duration (a float):粒子系统生存时间

    blendFunc (a ccBlendFunc):用于系统渲染的OpenGL的渲染函数

    positionType (a tCCPositionType).:使用kCCPositionTypeFree (默认值)属性可以自由的移动粒子们。或者使用kCCPositionTypeGrouped 让粒子们一组一组的移动。

    texture (a CCTexture2D).粒子的纹理

  • 相关阅读:
    C语言memmove()函数: 复制内存内容(可以重叠的内存块)
    #pragma pack(n)
    c++中sizeof的理解
    c/c++gdb下和发布版本下输出地址不同
    LeetCode 141. Linked List Cycle
    LeetCode 143. Reorder List
    TCP简介(一)
    通过cat方式生成yum源
    手动添加ceph的mds
    Linux 配置nfs
  • 原文地址:https://www.cnblogs.com/qinning199/p/3318291.html
Copyright © 2020-2023  润新知