cocos运动

大规模运动的物体通常有两种方法实现

1,使用帧动画来模拟

2,粒子效果

粒子系统有CCParticleSystem类实现,CCParticleSystem实现了对粒子的控制与调度,对粒子的操作包括:

1,产生粒子

2,更新粒子状态

3,回收无效粒子

粒子系统继承自CCNode ,可以添加到其他节点之中

cocos2d-x内置了一些粒子效果如:

- CCParticleSystem(所有粒子系统的父类)

-- CCParticleSystemPoint、CCParticleSystemQuad (点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性)

-- CCParticleExplosion :爆炸粒子效果

-- CCParticleFireworks :烟花粒子效果

-- CCParticleFire :火焰粒子效果

-- CCParticleFlower :花束粒子效果

-- CCParticleGalaxy :星系粒子效果

-- CCParticleMeteor :流星粒子效果

-- CCParticleSpiral :漩涡粒子效果

-- CCParticleSnow :雪粒子效果)

-- CCParticleSmoke :烟粒子效果

-- CCParticleSun :太阳粒子效果

-- CCParticleRain :雨粒子效果

例子:

ParticleSystem *particle = ParticleSnow::create();

particle->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png"));

this->addChild(particle);

上面这段代码添加到init里面就可以看到雪花的粒子效果

首先需要知道的是粒子的发射器模式,不同发射器模式下有不同的可用参数,也因此会产生不同的效果,这个就有点像是模具,用什么模具就生成出什么样的模型产品,如果随便引用参数那是有可能会报错的:

1.重力模式->setEmitterMode(kCCParticleModeGravity)

重力模式下可以按照设定的重力点setGravity,根据附加参数如速度、径向加速度、切向加速度……来获得对应的粒子效果。

2.半径模式->->setEmitterMode(kCCParticleModeRadius)

这个模式下,粒子的活动范围、动作是按圆形、半径来划分的,像上面的爆炸中心效果我就设定粒子初始产生的活动半径范围和粒子生命周期结束时活动的半径范围。

粒子还有三种关于运动位置坐标的影响模式->setPositionType(),这里引用一段解释:

假设粒子发射器A被加入了SpriteB, ( B->addChild(A) )

1.kCCPositionTypeFree

当B运动时,若设置Free,A发出的粒子则会出现拖尾现象。若设置其他的,则不会出现拖尾。

2.kCCPositionTypeRelative

当A相对B中坐标变动的时,若设置Relative,A发出的粒子则会出现拖尾现象。

3.kCCPositionTypeGrouped

而设置Grouped,不管什么坐标改变都不会发生拖尾现象。

总结,Free是相对于世界,Relative相对于父节点,Grouped是相对于发射器坐标。

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

CCParticleSystemQuad *emitter1 = CCParticleSystemQuad::create("Particle/BurstPipe.plist");

emitter1->setPosition(ccp( size.width/2, size.height/2)); // 设置发射粒子的位置

emitter1->setAutoRemoveOnFinish(true); // 完成后制动移除

emitter1->setDuration(10); // 设置粒子系统的持续时间秒

this->addChild(emitter1, 0, 1);

不使用plist文件创建粒子效果

auto size = Director::getInstance()->getWinSize();

auto m_emitter = ParticleSystemQuad::createWithTotalParticles(900);

m_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png"));

//The code below we can use both in 2.x and 3.x

m_emitter->setDuration(-1);

m_emitter->setGravity(Point(0, -240)); // in Cocos2d-x-2.x CCPoint(0, -240) is used

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(Point(size.width / 2, size.height));

m_emitter->setPosVar(Point(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);

m_emitter->setStartColor(Color4F(255,255,255,1));

m_emitter->setStartColorVar(Color4F(0,0,0,0));

m_emitter->setEndColor(Color4F(255, 255, 255, 1));

m_emitter->setEndColorVar(Color4F(0, 0, 0, 0));

m_emitter->setStartSize(30);

m_emitter->setStartSizeVar(0);

m_emitter->setEndSize(20.0f);

m_emitter->setEndSizeVar(0);

m_emitter->setEmissionRate(100);

addChild(m_emitter,10);

在重力模式中,以下属性是合法的:

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

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

speedVar(float)速度变量

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

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

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

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

半径模式有下列合法的属性:

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).粒子的纹理

来源https://zhidao.baidu.com/question/457919747065944485.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容