这里是Evankaka的博客,欢迎大家前来讨论与交流~~~~~~
转载请注明出处http://www.jb51.cc/article/p-ojbdkngm-kh.html
本文这里将要实现的一个功能是怪物受伤血量减少时,会出现一个扣了多少血量的数字从怪物中间飘到头顶,然后消失。本文上接博主的文章http://www.jb51.cc/article/p-zqwvvtub-kh.html
cocos2d-x版本:2.2.5
工程环境:windows7+VS2010
打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开
(源码免费下载)
效果:
目录
一、自定扣血飘字特效类FlyWord
二、使用方法
三、思路总结
一、自定扣血飘字特效类FlyWord
其实这里这里就是一个CCLabelTTF的类型来执行动画CCMoveBy的一个过程
下面来看看我自己定义,头文件FlyWord.h
- <pre name="code" class="cpp">#include "FlyWord.h"
- FlyWord* FlyWord::create(const char *word,const int fontSize,CCPoint begin){
- FlyWord* ret = new FlyWord();
- //这样写更安全一些
- if(ret && ret->init(word,fontSize,begin)){
- ret->autorelease();
- return ret;
- }
- CC_SAFE_DELETE(ret);//安全删除
- return nullptr;
- }
- bool FlyWord::init(const char *word,CCPoint begin){
- if(!CCNode::init()){
- return false;
- }
- //初始化
- _begin = begin;
- m_plabel = CCLabelTTF::create(word,"Marker Felt",fontSize);
- //设置颜色
- ccColor3B RGB;
- RGB.r=255;
- RGB.g=0;
- RGB.b=0;
- m_plabel->setColor(RGB);
- this->addChild(m_plabel);
- this->setPosition(ccp(begin.x,begin.y));
- //初始化完成不可见
- this->setVisible(false);
- return true;
- }
- //文字从下到上飘动
- void FlyWord::Flying()
- {
- CCMoveBy* moveact=CCMoveBy::create(0.5f,CCPointMake(0,70));//0.5秒向上移动70
- //创建回调动作,文字飘动完后
- CCCallFunc* callFunc=CCCallFunc::create(this,callfunc_selector(FlyWord::Flyend));
- //创建连续动作
- CCActionInterval* act=CCSequence::create(moveact,callFunc,NULL);
- //设置可见性
- this->setVisible(true);
- this->runAction(act);
- }
- void FlyWord::Flyend()
- {
- //完成之后设置隐藏
- this->setVisible(false);
- //回复原位
- this->setPosition(ccp(_begin.x,_begin.y));
- }
代码里都有非常详细的说明,这里我就不再说明了
二、使用方法
在Monster.h中添加头文件#include "FlyWord.h"
下面是每次随机产生10-30的一个要减少的血量,这也是游戏中比较常见的,怪物每次的受伤量可能不一样。
Monster.h添加成员变量
FlyWord *wen_zi;
然后在怪物的初始化函数中加:
//扣血飘字
wen_zi=FlyWord::create("-10",30,0));//放在当前怪物的锚点位置,
this->addChild(wen_zi,2);
- //受伤动画结束
- void Monster::HurtEnd()
- {
- IsHurt=false;
- //文字飘动
- wen_zi->Flying();
- //怪物掉血
- Monster_xue->setCurrentProgress(Monster_xue->getCurrentProgress()-10);
- if(Monster_xue->getCurrentProgress()==0)
- {
- //播放怪物死亡动画
- DeadAnimation("monster_dead",2,MonsterDirecton);
- }
- }