利用cocos2dx 3.2开发消灭星星(三)常用的飘字效果
2014-09-08 19:30
483 查看
游戏中经常需要用到一串字体从右到左的飘入,用于显示关卡等信息。在这里我创建了一个继承Node的一个类:FloatWord,大家也可以自己建一个自己觉得好用的飘字效果类。
头文件FloatWord.h
1)create 和 init 是连在一起的,调用create的时候必然会调用init
init方法接受3个参数,分别是飘入的字符串,字体大小,从哪里开始飘入
init方法的作用主要是初始化FloatWord内置的Label
2)FloatWord的飘入
floatIn函数接受两个参数,第一个参数是飘入经过的时间,第二个参数飘入后调用的函数
这里用到了C++11的function,如果不了解得话可以先去看看
这个floatIn函数也很简单,就是让内置_label执行以下MoveTo动作并且执行回调函数
3)FloatWord的飘出
这里也用到了C++11的lambda表达式,如果不了解的话可以先去看看
总的来说,floatOut的作用就是,执行飘出动作,调用传入的回调函数,执行销毁
4)FloatInOut
有时候,我们在字体飘入后可能不需要执行回调函数,只是短暂地停留后就直接飘走了,所以我们多定义了一个floatInOut函数
其实和上面的floatIn和floatOut差不多,就是参数有点变化。
参数一是飘入飘出的速度,参数二是飘入后停留的时间,参数三是飘走后的回调函数
至此,我们的FloatWord类已经创建完成。接下来就可以开始我们主游戏界面了。
头文件FloatWord.h
class FloatWord : public Node{ public: static FloatWord* create(const std::string& word,const int fontSize,Point begin); bool init(const std::string& word,const int fontSize,Point begin); void floatIn(const float delay,std::function<void()> callback); void floatOut(const float delay,std::function<void()> callback); void floatInOut(const float speed,const float delay,std::function<void()> callback); private: int _fontSize; Point _begin; Label* _label; };
1)create 和 init 是连在一起的,调用create的时候必然会调用init
FloatWord* FloatWord::create(const std::string& word,const int fontSize,Point begin){ FloatWord* ret = new FloatWord(); if(ret && ret->init(word,fontSize,begin)){ ret->autorelease(); return ret; } CC_SAFE_DELETE(ret); return nullptr; } bool FloatWord::init(const std::string& word,const int fontSize,Point begin){ if(!Node::init()){ return false; } _begin = begin; Size visibleSize = Director::getInstance()->getVisibleSize(); _label = Label::create(word,"Verdana-Bold",fontSize); _label->setPosition(begin); this->addChild(_label); return true; }
init方法接受3个参数,分别是飘入的字符串,字体大小,从哪里开始飘入
init方法的作用主要是初始化FloatWord内置的Label
2)FloatWord的飘入
void FloatWord::floatIn(const float delay,std::function<void()> callback){ Size visibleSize = Director::getInstance()->getVisibleSize(); MoveTo* move = MoveTo::create(delay,Point(visibleSize.width/2,_begin.y)); CallFunc* call = CallFunc::create(callback); Sequence* action = Sequence::create(move,call,NULL); _label->runAction(action); }
floatIn函数接受两个参数,第一个参数是飘入经过的时间,第二个参数飘入后调用的函数
这里用到了C++11的function,如果不了解得话可以先去看看
这个floatIn函数也很简单,就是让内置_label执行以下MoveTo动作并且执行回调函数
3)FloatWord的飘出
void FloatWord::floatOut(const float delay,std::function<void()> callback){ Size visibleSize = Director::getInstance()->getVisibleSize(); MoveTo* move = MoveTo::create(delay,Point(0,_begin.y)); CallFunc* call = CallFunc::create(callback); CallFunc* removeC = CallFunc::create([this](){ this->removeFromParentAndCleanup(true); }); Sequence* action = Sequence::create(move,call,removeC,NULL); _label->runAction(action); }floatOut函数和floatIn相对应,但是这里的除了执行通过函数传递的回调函数外,还会调用一个有Lambda表达式构造的匿名函数,用于销毁FloatWord对象
这里也用到了C++11的lambda表达式,如果不了解的话可以先去看看
总的来说,floatOut的作用就是,执行飘出动作,调用传入的回调函数,执行销毁
4)FloatInOut
void FloatWord::floatInOut(const float speed,const float delayTime,std::function<void()> callback){ Size visibleSize = Director::getInstance()->getVisibleSize(); MoveTo* moveIn = MoveTo::create(speed,Point(visibleSize.width/2,_begin.y)); MoveTo* moveOut = MoveTo::create(speed,Point(0,_begin.y)); CallFunc* removeC = CallFunc::create([this](){ this->removeFromParentAndCleanup(true); }); Sequence* action = Sequence::create(moveIn,DelayTime::create(delayTime),moveOut,removeC,CallFunc::create(callback),NULL); _label->runAction(action); }
有时候,我们在字体飘入后可能不需要执行回调函数,只是短暂地停留后就直接飘走了,所以我们多定义了一个floatInOut函数
其实和上面的floatIn和floatOut差不多,就是参数有点变化。
参数一是飘入飘出的速度,参数二是飘入后停留的时间,参数三是飘走后的回调函数
至此,我们的FloatWord类已经创建完成。接下来就可以开始我们主游戏界面了。
相关文章推荐
- 利用cocos2dx 3.2开发消灭星星(五)update与触摸事件
- 利用cocos2dx 3.2开发消灭星星(十)为游戏添加音效(项目源码分享)
- 利用cocos2dx 3.2开发消灭星星(六)如何在cocos2dx中显示中文
- 利用cocos2dx 3.2开发消灭星星(八)游戏的结束判断与数据控制
- 利用cocos2dx 3.2开发消灭星星(二)菜单(附素材)
- 利用cocos2dx 3.2开发消灭星星(九)为游戏添加一些特效
- 利用cocos2dx 3.2开发消灭星星(七)关于星星的算法
- 利用cocos2dx 3.2开发消灭星星(四)游戏主场景
- 利用cocos2dx 3.2开发消灭星星(一)基本介绍
- cocos2dx3.2开发 RPG《Flighting》(六)角色的状态和控制效果
- cocos2dx3.2开发 RPG《Flighting》(十三)让英雄炫酷点—技能以及技能效果
- Cocos2dx3.2编写常用UI组件(三)收集器效果Collector
- 【Cocos2d-X(2.x) 游戏开发系列之一】cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解
- cocos2dx-2.1.5 ddz-游戏开发之旅(一) 利用cocos2dx显示中文
- 利用DriverStudio3.2开发USB驱动程序
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
- 【COCOS2DX-LUA 脚本开发之十二】利用AssetsManager实现在线更新资源文件
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)