粒子系统主要分为如下两种模式:


1.重力式粒子系统(CCParticleSystemPoint ): 这种粒子存在重力,好像地球的万有引力一样,所有的粒子都会收到重力的约束,当然重力的大小是可以自己定义的

2.放射性粒子系统(CCParticleSystemQuad):: 这种粒子不存在重力,因此粒子好像都在空中,不再收到地球万有引力的作用

@1——根据 plist 文件创建粒子系统:

  1. CCParticleSystemQuad*emitter1=CCParticleSystemQuad::create("Particle/BurstPipe.plist");
  2. emitter1->setPosition(ccp(size.width/2,size.height/2));//设置发射粒子的位置
  3. emitter1->setAutoRemoveOnFinish(true);//完成后制动移除
  4. emitter1->setDuration(10);//设置粒子系统的持续时间秒
  5. this->addChild(emitter1,1);

@2——不使用plist 文件创建粒子系统

2.1重力式粒子系统/CCParticleSystemPoint 使用代码如下:

2.1.1】创建一个Point粒子系统
  • CCParticleSystemPoint*m_emitter=newCCParticleSystemPoint();
  • 2.1.2】产生300个粒子对象
  • m_emitter->initWithTotalParticles(300);
  • 2.1.3】设置粒子对象以及粒子系统的相关参数
  • //0.设置粒子的图像,粒子虽小但是还需要有自己的图像,如果没有texture属性引擎会默认一个图像
  • m_emitter->setTexture(CCTextureCache::sharedTextureCache("test.png"));//CCTextureCache::sharedTextureCache()->addImage("a.png"));
  • //1.设置粒子系统的持续时间
  • m_emitter->setDuration(-1);
  • //2.设置重力方向
  • m_emitter->setGravity(CCPointZero);
  • //3.设置角度,角度变化率
  • m_emitter->setAngle(0);
  • m_emitter->setAngleVar(360);
  • //4.设置径向加速度,径向加速度变化率
  • m_emitter->seTradialAccel(70);
  • m_emitter->seTradialAccelVar(10);
  • //5.设置切向加速度,切向加速度变化率
  • m_emitter->setTangentialAccel(80);
  • m_emitter->setTangentialAccelVar(0);
  • //6.设置运动速度,运动速度变化率
  • m_emitter->setSpeed(50);
  • m_emitter->setSpeedVar(10);
  • //7.设置粒子位置,粒子位置变化率
  • m_emitter->setPosition(CCPointMake(s.width/2,s.height/2));
  • m_emitter->setPosVar(CCPointzero);
  • //8.设置粒子存在时间,存在时间变化率
  • m_emitter->setLife(2.0f);
  • m_emitter->setLifeVar(0.3f);
  • //9.设置粒子开始时候颜色,粒子开始时颜色变化率
  • m_emitter->setStartColor({0.5f,0.5f,0.5f});//emitter1->setStartColor(ccc4f(1,1));//设置粒子RGBA值
  • m_emitter->setStartColorVar({0.5f,1.0f});
  • //10.设置粒子结束时候颜色,粒子结束时颜色变化率
  • m_emitter->setEndColor({0.1f,0.1f,0.2f});
  • m_emitter->setEndColorVar({0.1f,0.2f});
  • //11.设置粒子开始时候大小,粒子开始时大小变化率
  • m_emitter->setStartSize(1.0f);
  • m_emitter->setStartSizeVar(1.0f);
  • //12.设置粒子结束时候大小,粒子结束时大小变化率
  • m_emitter->setEndSize(32.0f);
  • m_emitter->setEndSizeVar(8.0f);
  • //13.设置每秒产生的粒子数
  • m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());//每秒产生粒子数=粒子总数/存活时间;
  • 2.1.4】将这个粒子系统设置到背景层上:
  • m_background->addChild(m_emitter,1);
  • 2.2【放射性粒子系统/CCParticleSystemQuad】

    2.2.1】创建一个Quad粒子系统
  • CCParticleSystemQuad*m_emtter=newCCParticleSystemQuad();
  • 2.2.2】产生300个粒子对象
  • 2.2.3】设置粒子对象以及粒子系统的相关参数
  • 12345678910111213和重力式粒子系统一样唯一不同的就是参数
  • 下面增加发射型粒子系统特有的属性
  • //14.设置粒子开始时候自旋转的速度,以及变化率:
  • m_emitter->setStartSpin(0);
  • m_emitter->setStartSpinVar(0);
  • //15.设置粒子结束时候自旋转的速度,以及变化率:
  • m_emitter->setEndSpin(0);
  • m_emitter->setEndSpinVar(2000);
  • 2.2.4】将m_emitter设置到m_background这个层(Layer)上面
  • 重力vs半径模式

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

    重力模式

    m_emitter->setEmitterMode(kCCParticleModeGravity);
  • m_emitter->setGravity(CCPointZero);
  • 在重力模式中,以下属性是合法的:

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

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

    speedVar(float)速度变量

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

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

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

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

    半径模式

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

    m_emitter->setEmitterMode(kCCParticleModeRadius);

  • //设置开始半径和结束半径
  • m_emitter->setStarTradius(100);
  • m_emitter->setStarTradiusVar(0);
  • m_emitter->setEndRadius(kCCParticleStarTradiusEqualToEndRadius);
  • m_emitter->setEndRadiusVar(0);
  • // 设置环型运动模式的每秒旋转角度及相应的随机加成范围值
  • m_emitter->setRotatePerSecond(180);
    m_emitter->setRotatePerSecondVar(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).粒子的纹理

    cocos2dx已经为我们提供了非常多的粒子系统效果:

    -- CCParticleSystem(所有粒子系统的父类) -- CCParticleSystemPoint、CCParticleSystemQuad (点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性) -- CCParticleExplosion :爆炸粒子效果 -- CCParticleFireworks :烟花粒子效果 -- CCParticleFire :火焰粒子效果 -- CCParticleFlower :花束粒子效果 -- CCParticlegalaxy :星系粒子效果 -- CCParticleMeteor :流星粒子效果 -- CCParticleSpiral :漩涡粒子效果 -- CCParticleSNow :雪粒子效果) -- CCParticleSmoke :烟粒子效果 -- CCParticleSun :太阳粒子效果 -- CCParticleRain :雨粒子效果

    cocos2d-x CCParticleSystem粒子系统的更多相关文章

    1. 使用iOS 7获取后台步骤

      我正在开发一个应用程序,在其中我应该获得我在体育活动中所做的步骤数.我找到了这段代码:使用此代码,当iPhone的显示器打开时,它工作得很好,但是当我关闭显示器时,它不再起作用.为了跟踪位置,我在iOS7中看到了一个功能“后台模式”.使用此功能,我可以在iPhone显示屏关闭时获取坐标.现在我要在显示器关闭时获取加速度计值,我该怎么做?我在网上看到iOS不允许在后台模式下使用加速度计,我如何在后台模式下使用加速度计来计算步数?

    2. iOS自由落体了解iphone的加速度计数据

      为什么当我将手机从大约4英尺放到枕头上,然后绘制用户加速度的大小时,我得到的峰值为1.5g然后是1g然后是2.5g然后是1g然后是2.5g然后是1g时间范围内的0g自由落体,有10个样本.理想情况下,由于重力减去空气阻力,它应该以恒定速率向下加速,那么为什么加速度会在自由落体时上下波动?是什么导致了这种噪音?

    3. 如何在IOS中获取加速度计数据?

      我正在使用UIAccelerotmeterDelegate方法accelerometer:didAccelerate:,但最近该方法已经在iOS5.0中弃用.那么获取加速度计数据的另一种方法是什么?文档没有提到我们应该使用的替代方法.解决方法您应该使用CoreMotionframework(在iOS4.0中引入)作为替代.创建一个cmmotionmanager的实例,并告诉它startAccele

    4. Swift之加速度传感器编程

      一:加速度核心类:首先需要创建一个加速度核心类MotionClass,导入CoreMotion核心类的创建思路是:1.需要创建一个单例,获取到加速度cmmotionmanager实例。然后调用相应的start或stop方法即可

    5. Swift - 加速传感器CoreMotion的用法,小球加速运动并反弹样例

      使用startAccelerometerUpdatesToQueue方法更新监听队列,并设置回调函数用于接受加速度通知。2,通知频率设置建议accelerometerUpdateInterval表示通知频率,表示间隔多少秒通知一次。一个是重力加速度,一个是用户对手机施加的加速度。所以当手机垂直静止时,虽然Useracceleration是0,但由于有重力加速度,所以两个合成后加速度y属性便是为负值。6,测试样例该应用运行后,将在画面正中央显示一个球体。倾斜手机时,球体将向着倾斜的方向运动。碰撞到四壁后反弹

    6. swift – SceneKit:应用程序在SCNView上渲染SpriteKit粒子系统时崩溃,当所有代码似乎都是系统代码的一部分时如何调试

      在SCNView的overlaySKScene属性中运行SpriteKit粒子系统会导致应用程序崩溃,并显示下面的堆栈跟踪.基于堆栈跟踪,似乎所有系统代码都在运行,所以你应该如何调试崩溃,更重要的是,确定它是否是SceneKit/SpriteKit的错误或应用程序中的错误?

    7. 从android加速度计获取倾斜角度

      我有一个实现SensorEventListener的类,我想得到我的设备使用加速度计的倾斜角度.我在互联网上查找了一些例子但他们使用了Sensor.TYPE_MAGNETIC_FIELD.我相信我的设备没有这个传感器,因为我做的时候以下检查manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size(),我得零.有没有办法通过使用获得倾斜角度Senso

    8. android – 线性加速方向,用于跟踪手机的上下移动

      我试图仅在垂直方向上跟踪设备的移动,即向上和向下移动.这应该与设备的方向无关.我已经知道或尝试过的事情就是这些>线性加速度由传感器TYPE_LINEAR_acceleration给出,轴是电话轴,因此跟踪任何特定轴都没有区别.>我尝试应用转置或旋转矢量的倒数(旋转矢量的反转或转置相同),然后尝试跟踪线性加速度矢量的z方向.似乎没有帮助.>我正在尝试使用重力值(TYPE_GraviTY)来制作点积,

    9. android – 不同移动设备中的加速度计和陀螺仪精度

      我想用移动设备的传感器实现室内定位系统.这个问题已经在几个地方讨论过,比如-here和here第一步是确定哪个平台是实现这样一个系统的最佳平台.主要的可能性是三星的galaxy/galaxy标签或iphone/ipad.最重要的标准是传感器数据的准确性.但是,这种比较非常复杂,因为精度不仅取决于设备本身,还取决于其上方的软件层.有没有关于这个问题的研究?智能手机和平板电脑的传感器之间有区别吗?任何指向网站或文章的链接都会非常有用提前致谢!

    10. Android在地球坐标系上获得加速度计

      ).我也是Android新手.我很感激你的帮助!我结合了2个先前的答案,这里是代码:1)获取地球坐标中的电话单元矢量2)反转矩阵以获得电话坐标中的地球单位矢量3)乘以单位矢量的手机加速度,将手机坐标转换为地球坐标.感谢大家的帮助!

    随机推荐

    1. 【cocos2d-x 3.x 学习笔记】对象内存管理

      Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

    2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

      由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

    3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

      在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

    4. cocos2dx3.x 新手打包APK注意事项!

      这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

    5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

      如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

    6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

      needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

    7. 02 Cocos2D-x引擎win7环境搭建及创建项目

      官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

    8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

      一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

    9. 03 Helloworld

      程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

    10. MenuItemImage*图标菜单创建注意事项

      学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

    返回
    顶部