粒子系统实现与用户交互的特效
来源:互联网 发布:光环大数据培训靠谱吗 编辑:程序博客网 时间:2024/05/16 15:44
原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/8294125。
无实战不学习,这次来用粒子系统实现与用户交互的特效。下面是在我的安卓手机上的效果图
第一张图片实现手指在屏幕上滑动的时候一群粒子跟着手指,第二张图片实现手指在屏幕上点击的时候一个爆炸效果。另外还用粒子系统实现一个太阳和烟。
下面看代码:
- CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,false);
这行带码添加触屏事件
添加触屏事件的响应函数:
- virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
- virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
- virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
先来看看实现太阳和烟的代码:
- CCSprite* pSprite = CCSprite::create("background.png");
- CC_BREAK_IF(! pSprite);
- pSprite->setPosition(ccp(400, 240));
- this->addChild(pSprite, 0);
- sun->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("fire.png"),CCRectMake(0,0,32,32));
- sun->setPosition(ccp(700,350));
- addChild(sun);
- smoke->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("fog.png"),CCRectMake(0,0,32,32));
- smoke->setPosition(ccp(600,150));
- smoke->setLife(1);
- addChild(smoke);
先添加一个背景,再添加太阳和烟,这里要注意了,太阳和烟一定要是成员函数,否则在Android手机上用户快速滑动屏幕的时候,手机卡的话局部对象会被释放,用了成员变量的话就不会出现这种效果。
- void HelloWorld::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
- {
- CCLog("ccTouchMoved");
- getLine(pTouch->getLocation());
- }
在ccTouchMoved方法中,调用getLine函数获得滑动时产生粒子的效果。
getLine函数如下
- void HelloWorld::getLine(CCPoint pt)
- {
- cocos2d::CCParticleSystemQuad *mSystem=CCParticleSystemQuad::particleWithFile("Particle.plist");
- //mSystem->initWithFile("Particle.plist");//plist文件可以通过例子编辑器获得
- mSystem->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("Particle.png")
- ,CCRectMake(0,0,32,32));//加载图片,第一个参数是纹理,第二个参数是选择图片上的位置
- mSystem->setBlendAdditive(true);//这个调用必不可少
- mSystem->setPosition(pt);//设置位置
- mSystem->setDuration(0.3f);
- mSystem->setLife(0.5f);
- addChild(mSystem);
- //mSystem->release();
- //delete mSystem;
- //CC_SAFE_DELETE(mSystem);
- mSystem->setAutoRemoveOnFinish(true);
- }
使用粒子编辑器编辑好的Particle.plist文件,产生粒子效果。根据传过来的位置设置粒子的位置。
对于点击的爆炸效果,先要判断用户是点击。
设置成员变量
- float x,y;
- bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
- {
- x=pTouch->getLocation().x;
- y=pTouch->getLocation().y;
- CCLog("ccTouchBegan");
- return true;
- }
在ccTouchBegan函数中赋初值。
在ccTouchEnded函数中判断是否是点击
- void HelloWorld::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
- {
- if(fabs(pTouch->getLocation().x-x)<20&&fabs(pTouch->getLocation().y-y)<20)
- {
- getBoom(pTouch->getLocation());
- }
- CCLog("ccTouchEnded");
- }
这里通过判断开始的点和结束的点的x和y方向是否都小于20来判断是否是点击。这样的话就算是用户点击有微小的偏移也会作为点击,这样处理与实现相符,应为用户点击的确会出现偏移,这时起始点和结束点有微小的距离。
在getBoom函数中实现爆炸效果:
- void HelloWorld::getBoom(CCPoint pt)
- {
- cocos2d::CCParticleSystemQuad *mSystem2 = CCParticleSystemQuad::particleWithFile("Boom.plist");
- //mSystem2->initWithFile("Boom.plist");//plist文件可以通过例子编辑器获得
- mSystem2->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("fire.png")
- ,CCRectMake(0,0,32,32));//加载图片,第一个参数是纹理,第二个参数是选择图片上的位置
- mSystem2->setBlendAdditive(true);//这个调用必不可少
- mSystem2->setPosition(pt);//设置位置
- mSystem2->setDuration(0.05f);
- addChild(mSystem2);
- //mSystem2->release();
- //CC_SAFE_DELETE(mSystem2);
- mSystem2->setAutoRemoveOnFinish(true);
- }
好了,就这样了,最后要注意的是一定要调用setAutoRemoveOnFinish(true);函数释放内存,不然内存泄露。
最后附上源代码:点击下载。
0 0
- 粒子系统实现与用户交互的特效
- 粒子系统实现与用户交互的特效
- 【Cocos2d-x游戏引擎开发笔记(12)】粒子系统实现与用户交互的特效
- Cocos2d-x游戏引擎开发笔记(12)】粒子系统实现与用户交互的特效
- 【Cocos2d-x游戏引擎开发笔记(12)】粒子系统实现与用户交互的特效
- 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;
- 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;
- 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;
- 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;
- 【iOS-Cocos2d游戏开发之十】添加粒子特效并解决粒子系统特效与Layer之间的坐标问题;
- 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;
- 粒子系统的实现
- canvas实现粒子特效
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
- 粒子系统的简单实现
- wpa_supplicant--EVENT 分析
- Oracle EBS WebADI的配置(IE+Excel)
- Android activity的启动模式
- glib介绍
- netlink简单介绍 (linux-3.14.2)
- 粒子系统实现与用户交互的特效
- GoF著作中未提到的设计模式(7):Publish-Subscribe
- eclipse 中将tab键用4个空格表示
- Gesture Recognizers与触摸事件分发
- Javascript:提取 对象的方法作为高阶函数的参数 要注意的
- 如何限制用户在某个时间段内禁止登录数据库
- 黑马程序员_C#基础之方法重载总结
- Struts2中的ModelDriven机制及其运用
- 安卓 图片不变型