cocos2d 粒子特效写消除游戏时消除特效怎么弄

cocos2D粒子爆炸特效的加速度问题,和制作演示时预览问题? - 知乎3被浏览116分享邀请回答01 条评论分享收藏感谢收起1 个回答被折叠()Pages: 1/6
主题 : cocos2d爆炸特效演示程序 (ShatteredSprite cocos2dx版)
级别: 骑士
可可豆: 1273 CB
威望: 1503 点
在线时间: 404(时)
发自: Web Page
来源于&&分类
cocos2d爆炸特效演示程序 (ShatteredSprite cocos2dx版)&&&
本帖被 小塔 设置为精华()
话说上一次的特效大赛,写了个组合特效,拿了个马克杯,相当的喜欢,每天都在用 &&                            这一届的特效大赛,发挥的范围相对较小,限定在粒子系统,而且是爆炸的特效。说实话,粒子系统使用过的,不过也就是用了下cocos2d自带的几个粒子效果,仅此而已。因此对粒子系统的原理和实现的了解几乎是0. 于是,趁着参加比赛的机会,好好的学习研究了一下。在还没开始动手前,说到爆炸效果,第一反应就是,要做出又酷又真实的效果,一个emitter肯定是搞不定的。一个真实的爆炸过程(依稀记得小时候在窗口和父亲拿着望远镜看远处化工厂爆炸的景象 ~~~),至少包含了下面这些元素:火焰,烟雾,碎片,尘土,亮光 ......  当然为了更加真实,声音是必须的,加个震屏效果肯定就更好了。在看了一些强大的粒子编辑器实现的效果,开始摆弄cocos2d的CCParticleSystem的各种参数,才发现想要实现很强大的功能是不可能的。原因在于,cocos2d的粒子系统支持的粒子属性是很全,但是对于单个粒子的属性的控制。是极其有限的。而且cocos2d的粒子系统目前没有支持texture的X,Y单独缩放的功能&&                  但是好在是开源的东西,于是就开始研究代码。说实话有经验的人可能5分钟就能找到点,再个5分钟就搞定了&&                    因为我对这玩意儿真是不通,反复看,查资料,终于找到了点 ~ 然后又因为数学水平太惨,一个简单的transformation又搞了半天。不过也多亏了这折腾,对cocos2d的粒子系统实现,有了个比较深入的认识。实现了单个粒子的X,Y缩放后,发现还是不够,因为CCParticleSystem里面,对粒子各种属性的计算只是简单的插值,在整个duration里面只支持单一的线性函数变换。而我想要的则是每个粒子属性,在duration或是粒子自身的lifespan内, 可以任意分段控制,每段都能够支持各种初等函数变换(抛物线,指数对数,幂函数,三角变换之类的)。这样一来,即使是一个简单的大小(size)变换,也能做出层次非常丰富的变换效果。因为对代码比较熟悉了,这个功能的实现就相当的简单了,直接就通过代理来做,在外部自己更具需要来控制粒子的某些属性的变化方式&&                    废话说了不少,最后是重点 ———— 演示程序以及期间的一些学习记录。因为单独的放几个粒子效果比较无聊,所以就做了个很简单的炸罐子小游戏,包含了下面一些东西:先上图吧: 更新:在cocos2d论坛上发布了下,老外想看视频效果,就录了一个,因为要传youtube,所以质量就差了点了。 更新:有朋友想要cocos2dx版的ShatteredSprite,就花时间搞了下,有兴趣的可以拿去玩玩。演示程序主要内容:    1. 加入一些新功能扩展的CCParticleSystem, CCParticleSystemQuad这个是通过修改源码实现的,本想不懂源码,使用RUNTIME来实现的,但是貌似不太可行,暂时就先放下了。主要的新功能有:. 支持X,Y方向的单独缩放,在rotation后也不会出现问题. 支持在update期间有选择性的动态控制单个粒子的某个属性。                目前支持的修改粒子属性:-(void) updateParticleSize:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleScale:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleSpeed:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleAngle:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleRotation:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleRadialAccel:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleColor:(tCCParticle *)p elapsed:(float)elapse dt:(float)-(void) updateParticleTangentialAccel:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleRidus:(tCCParticle *)p elapsed:(float)e dt:(float)-(void) updateParticleDegreesPerSecond:(tCCParticle *)p elapsed:(float)e dt:(float)       . 支持cocos2d-iphone-1.1-beta2b中的动画粒子功能(这个是我从1.1里合到2.1里来的)       . 新增两个宏,用于控制粒子的旋转和角度            kCCParticleStartSpinEqualToEndSpin            kCCParticleSpinEqualToAngle    2. CCSlidingMenuLayer    自己写的一个可以滑动隐藏/显示的菜单层    3. CCFrameSprite    自己写的一个简单的矩形Sprite    4. ShatteredSprite    之前在我的博客也介绍过的,一个实现了碎效果的Sprite,这个貌似是作者的升级版    5. CCRemoveAndCleanupAction    一个简单的action,淘来的 ,配合ShatteredSprite用的    6. CCShake    这个好像也是我介绍过的,一个抖动Action,用来做震屏效果以外的好O(∩_∩)O~    7. BParticleManager    这个是为了优化淘来的,一个实现很简单但是有效的重用emitter的管理类    8. CCMath.h 一些初等函数公式的宏    一些初等函数的宏,推荐各位可以在grapgh里面折腾折腾,熟悉熟悉曲线的特性。在控制粒子属性的时候很有用。    9. 各种爆炸效果元素的粒子类    其实上面的都和比赛无关,这些才是重点,各种爆炸相关的粒子类。(因为比赛要求是爆炸效果,所以我把其他一些无关的做着玩的,像是闪电之类的粒子特效去除了)    10. CCParticleEffectGenerator    通过组合基础的粒子效果再加以调整,搭配出的一些爆炸效果     11. cocos2d的CCParticleSystem粒子系统的实现的学习笔记 PS:1. 演示程序是用的是cocos2d 2.02. 程序只在我的touch3上测试过 (可怜我的4s,偷了到现在还没找到&&                    )3.很多效果都是靠手感调的,因为时间有限(周末抽空搞了两天),所以没有把效果搞到最佳,接下来几天也许会抽空在调整下,或是加几个新的效果&&              4.理论上,只要手感好,配合适当的函数调节粒子的属性,可以做出非常棒的效果的&&              [ 此帖被superraccoon在 16:56重新编辑 ]
(3 K) 下载次数:942
(2693 K) 下载次数:1228
(1130 K) 下载次数:1163
本人的新网站(cocos2d游戏开发......),希望大家光顾:http://www./zh
级别: 精灵王
可可豆: 4030 CB
威望: 4030 点
在线时间: 455(时)
发自: Web Page
楼主辛苦,这么晚还在战斗。
求组队刷本
级别: CocoaChina技术组
可可豆: 3618 CB
威望: 3568 点
在线时间: 2432(时)
发自: Web Page
很棒啊,有些掉桢。
级别: 禁止发言
UID: 69458
可可豆: 1682 CB
威望: 2616 点
在线时间: 849(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
哇哇哇&&好酷好炫啊~
级别: 精灵王
可可豆: 13044 CB
威望: 13351 点
在线时间: 1643(时)
发自: Web Page
很好,收藏了
级别: 精灵王
UID: 69992
可可豆: 3916 CB
威望: 3917 点
在线时间: 497(时)
发自: Web Page
鼓掌 旧的不去 新的。。额 不对 是祝楼主顺利找到丢失的4s话说有点卡呢[ 此帖被gwesley在 11:41重新编辑 ]
级别: 骑士
UID: 18860
可可豆: 500 CB
威望: 729 点
在线时间: 849(时)
发自: Web Page
看上去非常不错
级别: 骑士
可可豆: 1320 CB
威望: 1320 点
在线时间: 195(时)
发自: Web Page
楼主的*****组合威力巨大,我的设备被震得发不出声来。
级别: 管理员
UID: 12621
发帖: 2871
可可豆: 19672 CB
威望: 20617 点
在线时间: 4401(时)
发自: Web Page
这次有希望拿走iPod touch了哈哈~ 先加亮了!
我测试个帖子签名1
Pages: 1/6
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版用户名:杜甲同学
文章数:63
访问量:61922
注册日期:
阅读量:1297
阅读量:3317
阅读量:580709
阅读量:463536
51CTO推荐博文
Cocos2d-x &特效特效共有22种。在boolHelloWorld::init()函数中添加如下代码:if ( !CCLayer::init() )
CCSize size = CCDirector::sharedDirector()-&getWinSize();
CCSprite* sp = CCSprite::create("Icon.png");
sp-&setPosition(ccp(size.width * 0.5, size.height * 0.5));
sp-&setRotation(90);
addChild(sp);
//第一个参数是扭曲范围,第二个参数是是否扭曲z轴,分格的大小,第四个参数是间隔时间
CCActionInterval* shaky3D = CCShaky3D::create(5, true, ccg(15, 10), 3);
sp-&runAction(shaky3D);这是22中特效的实现方法:case 1:
//----------CCShaky3D
CCActionInterval *shaky3D=CCShaky3D::create(15, false, ccg(15, 10), 4);
sp-&runAction(shaky3D);
//--------CCShakyTiles3D
CCActionInterval *shakyTiles3D=CCShakyTiles3D::create(15, true, ccg(15, 10), 4);
sp-&runAction(shakyTiles3D);
//--------CCWaves
CCActionInterval *waves=CCWaves::create(10, 20, true,true,ccg(16, 12),4);
sp-&runAction(waves);
//--------CCWaves3D
CCActionInterval *waves3D=CCWaves3D::create(10, 20, ccg(16, 12),3);
sp-&runAction(waves3D);
//------CCWavesTiles3D
CCActionInterval *wavesTiles3D=CCWavesTiles3D::create(10, 20, ccg(16, 12),3);
sp-&runAction(wavesTiles3D);
//------CCFlipX3D
CCActionInterval *flipX3D=CCFlipX3D::create(3);
sp-&runAction(flipX3D);
//------CCFlipY3D
CCActionInterval *flipY3D=CCFlipY3D::create(3);
sp-&runAction(flipY3D);
//--------CCLens3D
CCActionInterval *lens3D=CCLens3D::create(CCPointMake(size.width/2, size.height/2), 240, ccg(15, 10), 2);
sp-&runAction(lens3D);
//---------CCRipple3D
CCActionInterval *ripple3D=CCRipple3D::create(CCPointMake(size.width/2, size.height/2), 240, 4,160,ccg(32,24), 3);
sp-&runAction(ripple3D);
//--------CCLiquid
CCActionInterval *liquid=CCLiquid::create(4, 20, ccg(16, 12), 4);
sp-&runAction(liquid);
//--------CCTwirl
CCActionInterval *twirl=CCTwirl::create(CCPointMake(size.width/2, size.height/2),2,2.5f,ccg(12, 8),3);
sp-&runAction(twirl);
//-------CCShuffleTiles
CCActionInterval *shuffleTiles=CCShuffleTiles::create(16,ccg(16, 12),2);
sp-&runAction(shuffleTiles);
//-------CCShatteredTiles3D
CCActionInterval *shuffleTiles3D=CCShatteredTiles3D::create(25,true,ccg(16, 12),3);
sp-&runAction(shuffleTiles3D);
//-------CCFadeOutTRTiles
CCActionInterval *fadeOutTRTiles=CCFadeOutTRTiles::create(ccg(16, 12),2);
sp-&runAction(fadeOutTRTiles);
//-------CCFadeOutBLTiles
CCActionInterval *fadeOutBLTiles=CCFadeOutBLTiles::create(ccg(16, 12),2);
sp-&runAction(fadeOutBLTiles);
//-------CCFadeOutUpTiles
CCActionInterval *fadeOutUpTiles=CCFadeOutUpTiles::create(ccg(16, 12),2);
sp-&runAction(fadeOutUpTiles);
//-------CCFadeOutDownTiles
CCActionInterval *fadeOutDownTiles=CCFadeOutDownTiles::create(ccg(16, 12),2);
sp-&runAction(fadeOutDownTiles);
//-----CCTurnOffTiles
CCActionInterval *turnOffTiles=CCTurnOffTiles::create(ccg(48, 32),2);
sp-&runAction(turnOffTiles);
//-----CCJumpTiles3D
CCActionInterval *jumpTiles3D=CCJumpTiles3D::create(1,30,ccg(15, 10),2);
sp-&runAction(jumpTiles3D);
//------CCSplitRows
CCActionInterval *splitRows=CCSplitRows::create(10,2);
sp-&runAction(splitRows);
//------CCSplitCols
CCActionInterval *splitCols=CCSplitCols::create(13,3);
sp-&runAction(splitCols);
//------CCPageTurn3D
CCActionInterval *pageTurn3D=CCPageTurn3D::create(ccg(15, 10), 3);
sp-&runAction(pageTurn3D);
}代码例子下载:
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 cocos2d特效教程 的文章

 

随机推荐