Cocos2d-x 粒子系统----实现下雪效果

转自:http://blog.csdn.net/zhy_cheng/article/details/8289683

太原市今天下雪了,8点出门,银装素裹,分外妖娆。今天就来主打下雪的效果,实现下雪效果需要使用粒子系统。

这张照片是刚照的,看看太原的雪景吧

先来说说我对粒子系统的了解吧,粒子系统是为了模仿自然世界的真实显现,比如说烟,雾,火花,闪电,火焰,下雪。粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子状态。大量的粒子叠加就可以产生我们需要的特效。

在Cocos2d-x中,实现粒子效果可以有三种方法,下面我一一道来。

1.代码自定义

使用这种方法,我们需要自己写代码,使用Cocos2d-x提供的CCParticleSystem来实现,使用这种方法,可以实现我们想要的任意效果。

这段文字的前面是雪花的图片,大家可能看不见,雪花是白的,背景也是白的。

下面是使用的背景图片:

下面是在这张图片上下雪的代码:

  1. CCParticleSystemQuad *m_emitter=new CCParticleSystemQuad();
  2. m_emitter->initWithTotalParticles(900);//900个粒子对象
  3. //设置图片
  4. m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png"));
  5. //设置发射粒子的持续时间-1表示一直发射,0没有意义,其他值表示持续时间
  6. m_emitter->setDuration(-1);
  7. //设置中心方向,这个店是相对发射点,x正方向为右,y正方向为上
  8. m_emitter->setGravity(CCPoint(0,-240));
  9. //设置角度,角度的变化率
  10. m_emitter->setAngle(90);
  11. m_emitter->setAngleVar(360);
  12. //设置径向加速度,径向加速度的变化率
  13. m_emitter->setRadialAccel(50);
  14. m_emitter->setRadialAccelVar(0);
  15. //设置粒子的切向加速度,切向加速度的变化率
  16. m_emitter->setTangentialAccel(30);
  17. m_emitter->setTangentialAccelVar(0);
  18. //设置粒子的位置,位置的变化率
  19. m_emitter->setPosition(CCPoint(400,500));
  20. m_emitter->setPosVar(CCPoint(400,0));
  21. //设置粒子声明,生命的变化率
  22. m_emitter->setLife(4);
  23. m_emitter->setLifeVar(2);
  24. //设置粒子开始的自旋转速度,开始自旋转速度的变化率
  25. m_emitter->setStartSpin(30);
  26. m_emitter->setStartSpinVar(60);
  27. //设置结束的时候的自旋转以及自旋转的变化率
  28. m_emitter->setEndSpin(60);
  29. m_emitter->setEndSpinVar(60);
  30. ccColor4F cc;
  31. cc.a=1.0f;
  32. cc.b=255.0f;
  33. cc.g=255.0f;
  34. cc.r=255.0f;
  35. ccColor4F cc2;
  36. cc2.a=0;
  37. cc2.b=0;
  38. cc2.g=0;
  39. cc2.r=0;
  40. //设置开始的时候的颜色以及颜色的变化率
  41. m_emitter->setStartColor(cc);
  42. m_emitter->setStartColorVar(cc2);
  43. //设置结束的时候的颜色以及颜色的变化率
  44. m_emitter->setEndColor(cc);
  45. m_emitter->setEndColorVar(cc2);
  46. //设置开始时候粒子的大小,以及大小的变化率
  47. m_emitter->setStartSize(30);
  48. m_emitter->setStartSizeVar(0);
  49. //设置粒子结束的时候的大小,以及大小的变化率
  50. m_emitter->setEndSize(20.0f);
  51. m_emitter->setEndSizeVar(0);
  52. //设置每秒钟产生粒子的数目
  53. m_emitter->setEmissionRate(100);
  54. addChild(m_emitter);
			CCParticleSystemQuad *m_emitter=new CCParticleSystemQuad();
			m_emitter->initWithTotalParticles(900);//900个粒子对象
			//设置图片
			m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png"));
			//设置发射粒子的持续时间-1表示一直发射,0没有意义,其他值表示持续时间
			m_emitter->setDuration(-1);
			//设置中心方向,这个店是相对发射点,x正方向为右,y正方向为上
			m_emitter->setGravity(CCPoint(0,-240));
			

			//设置角度,角度的变化率
			m_emitter->setAngle(90);
			m_emitter->setAngleVar(360);


			//设置径向加速度,径向加速度的变化率
			m_emitter->setRadialAccel(50);
			m_emitter->setRadialAccelVar(0);

			//设置粒子的切向加速度,切向加速度的变化率
			m_emitter->setTangentialAccel(30);
			m_emitter->setTangentialAccelVar(0);


			//设置粒子的位置,位置的变化率
			m_emitter->setPosition(CCPoint(400,500));
			m_emitter->setPosVar(CCPoint(400,0));
			
			//设置粒子声明,生命的变化率
			m_emitter->setLife(4);
			m_emitter->setLifeVar(2);


			//设置粒子开始的自旋转速度,开始自旋转速度的变化率
			m_emitter->setStartSpin(30);
			m_emitter->setStartSpinVar(60);

			//设置结束的时候的自旋转以及自旋转的变化率
			m_emitter->setEndSpin(60);
			m_emitter->setEndSpinVar(60);

			ccColor4F cc;
			cc.a=1.0f;
			cc.b=255.0f;
			cc.g=255.0f;
			cc.r=255.0f;
			ccColor4F cc2;
			cc2.a=0;
			cc2.b=0;
			cc2.g=0;
			cc2.r=0;
			//设置开始的时候的颜色以及颜色的变化率
			m_emitter->setStartColor(cc);
			m_emitter->setStartColorVar(cc2);


			
			//设置结束的时候的颜色以及颜色的变化率
			m_emitter->setEndColor(cc);
			m_emitter->setEndColorVar(cc2);

			//设置开始时候粒子的大小,以及大小的变化率
			m_emitter->setStartSize(30);
			m_emitter->setStartSizeVar(0);


			//设置粒子结束的时候的大小,以及大小的变化率
			m_emitter->setEndSize(20.0f);
			m_emitter->setEndSizeVar(0);
			
			//设置每秒钟产生粒子的数目
			m_emitter->setEmissionRate(100);

			addChild(m_emitter);


代码中的注释写的很是清楚,还是来看看下雪的效果吧:

2.使用粒子编辑器

粒子编辑器可以很方便的生成我们需要的效果,在Windows平台上,现在免费的只有一款软件ParticleEditor。

下载地址:点击下载

先使用这个粒子编辑器生成我需要的下雪的plist文件,然后将plist文件和图片问价一起复制到Resources文件中。

然后在Cocosd-x中就可以使用了。

下面是实现的代码:

  1. CCParticleSystemQuad* mSystem = new CCParticleSystemQuad();
  2. mSystem->initWithFile("zhycheng.plist");//plist文件可以通过例子编辑器获得
  3. mSystem->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("snow.png")
  4. ,CCRectMake(0,0,32,32));//加载图片,第一个参数是纹理,第二个参数是选择图片上的位置
  5. mSystem->setBlendAdditive(true);//这个调用必不可少
  6. mSystem->setPosition(ccp(400,670));//设置位置
  7. addChild(mSystem);
		CCParticleSystemQuad* mSystem = new CCParticleSystemQuad();
		mSystem->initWithFile("zhycheng.plist");//plist文件可以通过例子编辑器获得
		mSystem->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("snow.png")
        ,CCRectMake(0,0,32,32));//加载图片,第一个参数是纹理,第二个参数是选择图片上的位置
		 mSystem->setBlendAdditive(true);//这个调用必不可少
		mSystem->setPosition(ccp(400,670));//设置位置
		addChild(mSystem);


下面是实现的效果:

哈哈,这是我没有编辑好,就这效果。

3.使用Cocos2d-x提供的效果

Cocos2d-x为我们定义的一些已经做好的粒子效果,我们只需要指定图片就行了,具体有哪些,现在就写下面的这几个吧,刚才官网上不去,以后再编辑吧。

CCParticleFire CCParticleFireworks CCParticleSun CCParticleGalaxy

CCParticleFlower CCParticleMeteor CCParticleSpiral CCParticleExplosion CCParticleSmoke

我继续用Cocos2d-x来实现下雪的效果吧:

  1. CCParticleSnow *snow=CCParticleSnow::create();
  2. snow->setPosition(ccp(400,670));
  3. snow->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("snow.png"),CCRectMake(0,0,32,32));
  4. addChild(snow);
		CCParticleSnow *snow=CCParticleSnow::create();
		snow->setPosition(ccp(400,670));
		snow->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("snow.png"),CCRectMake(0,0,32,32));
		addChild(snow);


这里面一定要指定图片。

下面接着看效果吧:

这个效果才是最好的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值