• cocos2d-x开发记录:二,基本概念(粒子系统,Scheduler和定时器)


    七,粒子系统

    1.导言

    术语粒子系统是指计算机图形学技术,它使用大量非常小的精灵或其他图形对象来模拟某些种类的“模糊”现象,于传统渲染技术相比,它很难复制。通常是高度混沌无序的系统,自然现象。化学反应过程等。

     

    2.点与象限

    在早起的cocos2d-x的版本中,有两个类型的粒子系统:象限和点这两种粒子系统:

    ◆CCParticleSystemQuad

    ◆CCParticleSystemPoint

    与CCParticleSystemPoint相比CCParticleSystemQuad有这些额外的功能:

    ◆旋转的粒子,粒子可以围绕它的轴旋转。CCParticleSystemPoint忽略这个属性。

    ◆粒子能有任何大小。在CCParticleSystemPoint中,如果大小是大于64,它将被视为64。

    ◆整个系统能使用缩放属性被缩放。

    因为CCParticleSystemPoint不支持CCParticleBatchNode,它已从cocos2d-x粒子系统中删除。

    3.CCParticleBatchNode

    一个CCParticleBatchNode能引用一个并且仅有一个纹理(一个图像文件,一个纹理地图集)。只有在纹理中被包含的CCParticleSystems能被添加到CCSpriteBatchNode。所有CCParticleSystems添加到CCSpriteBatchNode中被OpenGL ES绘制调用一次。如果CCParticleSystems没有被添加到一个CCParticleBatchNode那么OpenGL ES需要为每一个CCParticleSystems来绘制调用,这是非常低效率的。

    4.创建一个象限Particle System

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

    5.Gravity 对 Radius 模式

    Gravity(重力)模式

    重力模式让粒子系统飞向或远离一个中心点。它的长处是在于允许非常动态有组织的效果。设置的代码如下:

    // Gravity Mode
    
    this->m_nEmitterMode = kCCParticleModeGravity;
    
    
    // Gravity Mode: gravity
    
    this->modeA.gravity = ccp(0,-90);

     

    以下这些属性只在重力模式下有效:

    gravity (一个CGPoint)粒子系统的重力

    speed (float) 粒子的发射速度

    speedVar (float)速度的方差

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

    tangencialAccelVar (float) 正切加速度方差

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

    radialAccelVar (float) 半径加速度方差

    Radius(半径)模式

    半径模式可以让例子旋转成一个圈。它还允许你创建要么向内或向外冲的螺旋效应的粒子。设置代码如下

    // Radius Mode
    
    this->m_nEmitterMode = kCCParticleModeRadius;
    
    // Radius Mode: startRadius
    
    this->modeB.startRadius = 0;
    
    this->modeB.startRadiusVar = 0;//ccp(0,0);

     

    以下这些属性只在半径模式下有效:

    startRadius (float) 粒子系统的起始半径

    startRadiusVar (float) 起始半径的方差

    endRadius (float)粒子系统的结束半径

    endRadiusVar (afloat) 结束半径的方差

    rotatePerSecond (float)每秒围绕原点旋转度数

    rotatePerSecondVar (float) 度数方差

    6.所有模式的通用属性

    以下是粒子系统的通用属性

    startSize: 粒子颗粒的起始像素大小

    startSizeVar

    endSize: 如果你想要使用kCCParticleStartSizeEqualToEndSize开始大小==最终尺寸。

    endSizeVar

    startColor (ccColor4F)

    startColorVar (ccColor4F)

    endColor (ccColor4F)

    endColorVar (ccColor4F)

    startSpin:仅用于CCParticleSystemQuad

    startSpinVar:仅用于CCParticleSystemQuad

    endSpin:仅用于CCParticleSystemQuad

    endSpinVar:仅用于CCParticleSystemQuad

    life:短时间内粒子生存的时间

    lifeVar:

    angle: (a float)粒子的起始角度

    angleVar

    positon: (CGPoint)

    posVar

    centerOfGravity (CGPoint)

    系统的通用属性

    emissionRate (float)。每秒发射多少粒子

    duration (float)。粒子系统存在多少秒(和live属性不同)。使用kCCParticleDurationInfinity表示无限。

    blendFunc (ccBlendFunc)。用于系统的OpenGL混合函数

    positionType (tCCPositionType)。使用kCCPositionTypeFree(默认)自由移动粒子,或使用kCCPositionTypeGrouped移动一个组。

    texture (CCTexture2D)。用于粒子系统的纹理

    例子

    cocos2d-x附带一些预定义的粒子,在运行时可以定制。列出预定义的粒子

    CCParticleFire: Point particle system. Uses Gravity mode.

    CCParticleFireworks: Point particle system. Uses Gravity mode.

    CCParticleSun: Point particle system. Uses Gravity mode.

    CCParticleGalaxy: Point particle system. Uses Gravity mode.

    CCParticleFlower: Point particle system. Uses Gravity mode.

    CCParticleMeteor: Point particle system. Uses Gravity mode.

    CCParticleSpiral: Point particle system. Uses Gravity mode.

    CCParticleExplosion: Point particle system. Uses Gravity mode.

    CCParticleSmoke: Point particle system. Uses Gravity mode.

    CCParticleSnow: Point particle system. Uses Gravity mode.

    CCParticleRain: Point particle system. Uses Gravity mode.

    八,Scheduler (任务调度)和Timer Callback(定时器回调)

    两种不同的回调类型CCScheduler vs NSTimer(objective-c中的定时器)

    Scheduler负责触发回调任务

    1.一个不同类型的callbacks selectors:

    Update selector:它会每帧调用。你能自定义优先级

    Custom selector: 它能自定义间隔时间

    应该尽可能地避免选择自定义选择器。更新选择器更快和更少的内存消耗。

    2.CCScheduler vs NSTimer

    Cocos2D调度器提供你游戏的定时事件和调用。你不应该使用NSTimer。应该使用CCScheduler类。

    ◆CCNode 对象知道如何调用和取消调度事件并且使用Cocos2D调度器有几个独特的优势比使用NSTimer要好

    ◆只要CCNode不再可见或从场景中移除,调度器就会释放。

    ◆当Cocos2D 暂停或恢复被rescheduled时,调度器也会释放

    ◆自从最近一次调度器被调用后开始,下次调用后调度器传递一个单位为milliseconds的间隔时间。这个间隔时间对物理引擎是非常有用的。

    ◆使用this->scheduleUpdate()会确保你的更新函数将会在每帧渲染之前被调用 

    因此,CCScheduler可以帮你节省大量的时间并让你专注于你的游戏的机制。

  • 相关阅读:
    三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
    行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
    各种矩阵压缩原理(书本上没有讲到的具体公式推理过程)
    KMP算法的实现(Java语言描述)
    链表一元多项式计算器的实现(Java语言描述)
    链表的实现(Java语言描述)
    队列的链式存储方式的实现(Java语言描述)
    Java泛型数组
    三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
    利用栈实现算术表达式求值(Java语言描述)
  • 原文地址:https://www.cnblogs.com/tianjian/p/3370341.html
Copyright © 2020-2023  润新知