利用cocos2dx 3.2开发消灭星星(三)常用的飘字效果

原创 2014年09月08日 19:30:53

游戏中经常需要用到一串字体从右到左的飘入,用于显示关卡等信息。在这里我创建了一个继承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类已经创建完成。接下来就可以开始我们主游戏界面了。




PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第一篇(界面)

背景:    来自星星的你电视剧很火,消灭星星游戏也很火,好像星星都很火,笔者就以星星为主题开始这篇博文。消除类的游戏挺受欢迎的,从2013年度app store最赚钱的游戏--粉碎糖果传奇,到总是...
  • touchsnow
  • touchsnow
  • 2014年03月03日 10:33
  • 20774

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

第二节说到在菜单场景MenuScene中加入一个菜单并且加入一个开始按钮切换到GameScene,下面我们来讲一下游戏的主界面GameScene和GameLayer 一、主场景GameScene ...
  • hezijian22
  • hezijian22
  • 2014年09月10日 20:36
  • 3200

利用cocos2dx 3.2开发消灭星星(九)为游戏添加一些特效

其实整个消灭星星开发也差不多了,为了使游戏好看些,不如为游戏添加一些...
  • hezijian22
  • hezijian22
  • 2014年10月01日 19:45
  • 2730

利用cocos2dx 3.2开发消灭星星(五)update与触摸事件

上一节我们一直在讲星星有两个位置,当前位置与目标位置。究竟是什么,
  • hezijian22
  • hezijian22
  • 2014年09月10日 20:48
  • 2433

利用cocos2dx 3.2开发消灭星星(八)游戏的结束判断与数据控制

如果你看完之前的,那么你基本已经拥有一个消灭星星
  • hezijian22
  • hezijian22
  • 2014年10月01日 19:41
  • 1899

利用cocos2dx 3.2开发消灭星星(七)关于星星的算法

在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix(星星矩阵:即所有的星星)...
  • hezijian22
  • hezijian22
  • 2014年10月01日 17:57
  • 2406

利用cocos2dx 3.2开发消灭星星(六)如何在cocos2dx中显示中文

由于编码的不同,在cocos2dx中的Label控件中如果放入
  • hezijian22
  • hezijian22
  • 2014年10月01日 17:44
  • 2017

Cocos2dx3.2编写常用UI组件(三)收集器效果Collector

前言: 在游戏中,我们经常可以看到,获取分数后,分数会自动升到对应的分数栏上面。今天我们就来实现这种效果 正文: 这种效果实现起来其实非常的简单,只需要对生成出来的分数(通常是一个Sprite或Nod...
  • hezijian22
  • hezijian22
  • 2015年01月26日 15:01
  • 1133

消灭星星cocos2dx

  • 2017年09月11日 18:51
  • 3.11MB
  • 下载

基于cocos2dx 2.2实现的《消灭星星》源代码

  • 2014年04月03日 17:05
  • 1.21MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用cocos2dx 3.2开发消灭星星(三)常用的飘字效果
举报原因:
原因补充:

(最多只允许输入30个字)