论坛首页 移动开发技术论坛

Cocos2d-x中自定义粒子系统

浏览 941 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-09-15  

除了使用Cocos2d-x11种内置粒子系统外,我们还可以通过创建ParticleSystemQuad对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统。使用ParticleSystemQuad自定义粒子系统至少有两种方式可以实现:代码创建和plist文件创建。

代码创建

所谓代码创建就是完全通过代码方式实现,其中所有的属性全部是通过程序代码设置。这要求开发人员对于这些属性值非常熟悉,而且这种方式无法预览,只能通过程序运行看效果,调整,再运行看效果,再调整,因此比较麻烦。

要想实现如下图所示的下雪粒子系统,我们当然可以通过前面介绍的方式实现,但本节我们先介绍通过自定义粒子系统实现。

 

代码创建的下雪粒子系统,主要代码如下:

 

[html] view plaincopy
 
  1. bool HelloWorld::init()  
  2. {  
  3. if ( !Layer::init() )  
  4. {  
  5. return false;  
  6. }  
  7.    
  8. Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    
  10. auto bg = Sprite::create("background-1.png");  
  11.    
  12. bg->setPosition(Point(visibleSize.width/2, visibleSize.height /2));  
  13. this->addChild(bg);  
  14.    
  15. auto particleSystem = ParticleSystemQuad::createWithTotalParticles(200);    ①  
  16.    
  17. //设置雪花粒子纹理图片  
  18. particleSystem->setTexture(TextureCache::getInstance()->addImage("snow.png"));    ②  
  19. //设置发射粒子的持续时间-1表示永远持续  
  20. particleSystem->setDuration(-1);  
  21. //设置粒子的重力方向   
  22. particleSystem->setGravity(Point(0,-240));  
  23.    
  24. //设置角度以及偏差  
  25. particleSystem->setAngle(90);   
  26. particleSystem->setAngleVar(360);  
  27.    
  28. //设置径向加速度以及偏差  
  29. particleSystem->setRadialAccel(50);  
  30. particleSystem->setRadialAccelVar(0);  
  31.    
  32. //设置粒子的切向加速度以及偏差  
  33. particleSystem->setTangentialAccel(30);  
  34. particleSystem->setTangentialAccelVar(0);  
  35.    
  36. // 设置粒子初始化位置偏差  
  37. particleSystem->setPosVar(Point(400,0));  
  38.    
  39. //设置粒子生命期以及偏差  
  40. particleSystem->setLife(4);  
  41. particleSystem->setLifeVar(2);  
  42.    
  43. //设置粒子开始时候旋转角度以及偏差  
  44. particleSystem->setStartSpin(30);  
  45. particleSystem->setStartSpinVar(60);  
  46.    
  47. //设置结束时候的旋转角度以及偏差  
  48. particleSystem->setEndSpin(60);  
  49. particleSystem->setEndSpinVar(60);  
  50.    
  51. //设置开始时候的颜色以及偏差  
  52. particleSystem->setStartColor(Color4F(1,1,1,1));  
  53. //设置结束时候的颜色以及偏差  
  54. particleSystem->setEndColor(Color4F(1,1,1,1));  
  55.    
  56. //设置开始时候粒子大小以及偏差  
  57. particleSystem->setStartSize(30);  
  58. particleSystem->setStartSizeVar(0);  
  59.    
  60. //设置粒子结束时候大小以及偏差  
  61. particleSystem->setEndSize(20.0f);  
  62. particleSystem->setEndSizeVar(0);  
  63.    
  64. //设置每秒钟产生粒子的数量  
  65. particleSystem->setEmissionRate(100);  
  66.    
  67. particleSystem->setPosition(Point(visibleSize.width/2, visibleSize.height + 50));  
  68.    
  69. this->addChild(particleSystem);  
  70.    
  71.     return true;  
  72. }  

 

 

上述第①行代码ParticleSystemQuad::createWithTotalParticles(200)是创建ParticleSystemQuad对象,静态createWithTotalParticles函数是通过指定初始粒子数来创建粒子对象。

第②行代码是指定粒子的纹理,TextureCache::getInstance()->addImage("snow.png")语句可以通过指定的纹理图片创建纹理对象Texture2D贴图的纹理图片宽高必须是2的n次幂,大小不要超过64x64像素,在美工设计纹理图片时候,不用关注太多细节,例如:设计雪花纹理图片时候,按照雪花是有6个角的,很多人会设计为图10-7所示的样式,而事实上我们需要的图10-8所示的渐变效果的圆点

雪花图片 

 

雪花粒子纹理图片

 

plist文件创建

代码创建方式要维护很多属性,要想手工调整这些属性那是非常困难的事情,我们推荐使用Particle Designer等粒子设计工具进行所见即所得的设计,这些工具一般会生成一个描述粒子的属性类表文件plist,然后通过类似下面的语句加载:

auto particleSystem =ParticleSystemQuad::create("snow.plist");

snow.plist是描述运动的属性文件,plist文件是一种XML文件,参考代码如下:

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
  3. <plist version="1.0">  
  4. <dict>  
  5. <key>angle</key>  
  6. <real>270</real>  
  7. <key>angleVariance</key>  
  8. <real>5</real>  
  9. <key>blendFuncDestination</key>  
  10. <integer>771</integer>  
  11. <key>blendFuncSource</key>  
  12. <integer>1</integer>  
  13. <key>duration</key>  
  14. <real>-1</real>  
  15. <key>emitterType</margin: 0px; padding: 0px; border: none; color: #993300; font-weight: bold; background-color:
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics