cocos2d-x 粒子系统详解

cocos2d-x中Particle System(粒子系统)详解

Velocity(速度)
每个粒子都有一个随机产生的初始速度,粒子的新速度由加速度和空气阻尼来求得
Acceleration(加速度)
在烟火中,每个粒子的加速度都等于重力加速度
Color(颜色)
粒子颜色取决于粒子的速度或生命值的大小
Life(生命值)
每个粒子都有一个初始的随机生命值,这个值将随着时间的推移而逐渐减小,直到等于0
你会发现,Particle System中的粒子与C++中类的概念有些类似,实际上你完全可以将它当成类来处理,一个粒子就是一个类的实例对象,只不过有时在涉及程序优化的具体细节上,你需要放弃使用类,而使用简单而快速的紧凑代码。
Particle System虽然在处理大量单独粒子的运动(变化)上很有用处,但是一涉及到需要考虑粒子间相互作用的场合,因为这时的计算量呈粒子数量的指数级增长,它就显得有些力不从心了。比如在模拟有相互引力作用下的大量星体的运动,大量粒子的相互碰撞等。
二、粒子系统的生命周期

首先,从粒子池中获取一个粒子,
然后计算赋予初始属性后,发射他。
在粒子飞行过程中,不断的刷新来修正他的属性。
粒子死亡后,回归粒子池。
 三、例子相关属性
Variance 浮动值:表示随机上下浮动的修正值,实际值由原始值+浮动值组成,例如Lifespan=5,Lifespan Variance=1 那么随机出来的结果就是4~6


四、发射器相关属性
发射器有两种,一种是重力发射器(用于实现在重力条件下的粒子运动),另一种是放射发射器(用于实现在无重力下的粒子运动)。


五、纹理Texture
如果没有贴图的话,所有粒子将会是单调的色块。粒子的贴图没有具体限制,可以是灰度图,也可以是一张具体的图片。但要小于64x64pixel
六、cocos2d-x实现Particle System

 

第一种方法:
1
2
3
4
5
6
CCParticleSystem* m_emitter;
  m_emitter = CCParticleFireworks::node();
  m_emitter->retain();
  this ->addChild(m_emitter, 10);
  m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage(“image.png”) );
  m_emitter->setPosition(ccp(489,320));
第二种方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
CCParticleSystem* m_emitter;
m_emitter = new CCParticleSystemQuad();
  m_emitter->initWithTotalParticles(50);
  this ->addChild(m_emitter, 10);
  m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage(s_stars1) );
  m_emitter->setDuration(-1);
    
    // gravity
  m_emitter->setGravity(CCPointZero);
    
    // angle
  m_emitter->setAngle(90);
  m_emitter->setAngleVar(360);
    
    // speed of particles
  m_emitter->setSpeed(160);
  m_emitter->setSpeedVar(20);
    
    // radial
  m_emitter->setRadialAccel(-120);
  m_emitter->setRadialAccelVar(0);
    
    // tagential
  m_emitter->setTangentialAccel(30);
  m_emitter->setTangentialAccelVar(0);
    
    // emitter position
  m_emitter->setPosition( CCPointMake(160,240) );
  m_emitter->setPosVar(CCPointZero);
    
    // life of particles
  m_emitter->setLife(4);
  m_emitter->setLifeVar(1);
    
    // spin of particles
  m_emitter->setStartSpin(0);
  m_emitter->setStartSizeVar(0);
  m_emitter->setEndSpin(0);
  m_emitter->setEndSpinVar(0);
    
    // color of particles
  ccColor4F startColor = {0.5f, 0.5f, 0.5f, 1.0f};
  m_emitter->setStartColor(startColor);
    
  ccColor4F startColorVar = {0.5f, 0.5f, 0.5f, 1.0f};
  m_emitter->setStartColorVar(startColorVar);
    
  ccColor4F endColor = {0.1f, 0.1f, 0.1f, 0.2f};
  m_emitter->setEndColor(endColor);
    
  ccColor4F endColorVar = {0.1f, 0.1f, 0.1f, 0.2f};
  m_emitter->setEndColorVar(endColorVar);
    
    // size, in pixels
  m_emitter->setStartSize(80.0f);
  m_emitter->setStartSizeVar(40.0f);
  m_emitter->setEndSize(kParticleStartSizeEqualToEndSize);
    
    // emits per second
  m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());
    
    // additive
  m_emitter->setIsBlendAdditive( true );
第三种方法:
1
2
3
4
5
6
CCParticleSystemQuad * system = new CCParticleSystemQuad();
   system ->initWithFile( "Images/SpinningPeas.plist" ); //plist文件可以通过例子编辑器获得
   system ->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage( "Images/particles.png" )
        ,      CCRectMake(0,0,32,32));
   addChild( system , 10);
system ->setPosition
原文链接: http://www.cnblogs.com/shangdahao/archive/2012/04/14/2447571.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值