游戏中经常需要用到一串字体从右到左的飘入,用于显示关卡等信息。在这里我创建了一个继承Node的一个类: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开发消灭星星(三)常用的飘字效果相关推荐

  1. 利用cocos2dx 3.2开发消灭星星(一)基本介绍

    最近在大哥那边接到一个任务,用cocos2dx开发一款消灭星星.开始的时候想上网找个demo,但找到的是cocos2d-js版的.唯一找到一个也是基于cocos2dx2.2开发出来的,与现在的3.2版 ...

  2. 利用cocos2dx 3.2开发消灭星星(四)游戏主场景

    第二节说到在菜单场景MenuScene中加入一个菜单并且加入一个开始按钮切换到GameScene,下面我们来讲一下游戏的主界面GameScene和GameLayer 一.主场景GameScene Ga ...

  3. Laya2.6.1开发消灭星星demo源码

    Laya2.6.1开发消灭星星demo源码 地址:https://download.csdn.net/download/qq_43588531/13183963?ops_request_misc=%2 ...

  4. 消灭星星(三)动画以及随机星星

    星星是一个消失的动画,fadeOut,这个动画在DoTween里面有问题,验证下来一旦对一个对象实施此操作,则所有对象都会消失,而且重新开始这些对象也无法恢复显示.这里我们需要添加一个Aniation ...

  5. html 页面飘花,HTML5开发实例-ThreeJs实现粒子动画飘花效果代码分享

    粒子动画在ThreeJs可以用几种方式实现 本次样例使用Sprite类来构建粒子 大概意思:这个类创建的对象是一个始终面向相机的平面,可以把贴图应用在上面,Sprite对象无法添加阴影 ,所以cast ...

  6. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第三篇(分数)

    背景: 经过消灭星星第二篇算法,最高的山峰已经过去了,剩下的都是小沟小河,没什么难度了.这一节笔者继续完成消灭星星的分数篇,这节主要包括:触摸提示得分 比如4 blocks 80 points,然后产 ...

  7. H5游戏开发:消灭星星

    「消灭星星」是一款很经典的「消除类游戏」,它的玩法很简单:消除相连通的同色砖块. 1. 游戏规则 「消灭星星」存在多个版本,不过它们的规则除了「关卡分值」有些出入外,其它的规则都是一样的.笔者介绍的版 ...

  8. cocos2dx小游戏源码(消灭星星)

    才开始了解cocos2dx,为了练手,开发了一下消灭星星这款游戏,游戏资源在网上下载的,游戏也是参考自android平台消灭星星这款游戏.现提供游戏源码,已在android平台测试过,有兴趣的同学可以 ...

  9. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

最新文章

  1. java编程中的点_Java的21个技术点和知识点归纳(转)
  2. JS实现图片放大查看
  3. Oracle数据库——SQL高级查询
  4. powershell 查看WMI信息和几个WMI类示例
  5. 字符串切割(split())
  6. 网关服务器怎么配置文件,网关服务器怎么配置文件
  7. 基础概念总结(spring security、Quartz、JUnit测试)
  8. 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
  9. 二项分布的期望方差证明_关于二项分布
  10. matlab中创建一个工程,从文件夹创建新工程
  11. 通俗理解TCP握手次数是三次?
  12. php生成gif动态图片_PHP绘制GIF动态图片
  13. Android Sqlite 工具类封装
  14. 基于51单片机的电子罗盘数字指南针HCM8553原理图程序设计
  15. 电商平台-会员积分系统的设计与架构
  16. 远程连接oracle6,win7 64位远程连接oracle11g64位
  17. 你的大三,推荐做的几件事
  18. pikachu靶场通关指南
  19. GAMIT重新编译及升级
  20. LSF - 提交GUI应用到LSF无法运行,报错Failed to connect to socket /tmp/dbus-xxxxxxxxx: Connection refused

热门文章

  1. 发票识别和发票查验在财税领域的应用
  2. oracle查询多表连接语句怎么写,Oracle join多表查询
  3. typed.js——动态打印字体插件
  4. Meta年营收1166亿美元:来自Reality Labs亏损137亿美元
  5. python实现火车座位安排_CSP-火车购票Python实现
  6. iOS 整个app字体模糊、变大
  7. Idea创建Maven项目介绍
  8. EXCEL电子表格:记录采集与查询器(独立程序版).xlsm
  9. 全国计算机等级考试三级数据库技术(九)
  10. Hadoop 真的要死了吗?