Cocos2d-x 自定义按钮类控制精灵攻击----之游戏开发《赵云要格斗(2)
来源:未知 责任编辑:责任编辑 发表时间:2015-09-09 15:29 点击:次
使用方法:
在要用到的地方加头文件#include "ControlButton.h"
定义成员变量: ControlButton* btn;//按钮控件变量
在bool HelloWorld::init()函数里添加:
//添加攻击按钮 btn=ControlButton::create(); btn->CreateButton("bt.png"); btn->setPosition(ccp(visibleSize.width-50,50)); this->addChild(btn,2);我们来看看效果
二、精灵攻击动画和结束判断 按钮有了,接下来要想想怎么来控制精灵攻击的动画呢? 精灵攻击的动画应该是我们按下按钮,他就播放一次动画,这里为小心,如果我们连着按按钮很快呢?这时精灵就会动得很不真实,我们应该每次按下前要先判断上次的动画是否结束,如果结束,而且又按下按钮,那么就就放攻击的动画,如果上次的动画还没结束,那就不再播放攻击的动画。 这时,我想起了,在Hero.h(上篇中的)定义 bool I sAttack成员变量,默认为false;。在攻击就是true,然后在攻击动画结束后把它设为false, 同时增加两个函数 //攻击动画
void AttackAnimation(const char *name_plist,const char *name_png,const char *name_each,const unsigned int num,bool run_directon);
//攻击动画结束
void AttackEnd();
然后相应的实现
void Hero::AttackAnimation(const char *name_plist,const char *name_png,const char *name_each,const unsigned int num,bool run_directon) { if(IsAttack) return; //将图片加载到精灵帧缓存池 m_frameCache=CCSpriteFrameCache::sharedSpriteFrameCache(); m_frameCache->addSpriteFramesWithFile(name_plist,name_png); frameArray =CCArray::createWithCapacity(num); unsigned int i; for(i=1;i<=num;i++) { CCSpriteFrame* frame=m_frameCache->spriteFrameByName(CCString::createWithFormat("%s%d.png",name_each,i)->getCString()); frameArray->addObject(frame); } //使用列表创建动画对象 CCAnimation* animation=CCAnimation::createWithSpriteFrames(frameArray); if(HeroDirecton!=run_directon) { HeroDirecton=run_directon; } animation->setLoops(1);//表示循环播放次 animation->setDelayPerUnit(0.1f);//每两张图片的时间隔,图片数目越少,间隔最小就越小 //将动画包装成一个动作 CCAnimate* act=CCAnimate::create(animation); //创建回调动作,攻击结束后调用AttackEnd() CCCallFunc* callFunc=CCCallFunc::create(this,callfunc_selector(Hero::AttackEnd)); //创建连续动作 CCActionInterval* attackact=CCSequence::create(act,callFunc,NULL); IsAttack=true; m_HeroSprite->runAction(attackact); } void Hero::AttackEnd() { //恢复精灵原来的初始化贴图 this->removeChild(m_HeroSprite,TRUE);//把原来的精灵删除掉 m_HeroSprite=CCSprite::create(Hero_name);//恢复精灵原来的贴图样子 m_HeroSprite->setFlipX(HeroDirecton); this->addChild(m_HeroSprite); IsAttack=false; }
上面的创建连续动作是本次的关键点,在每次攻击动画AttackAnimation(...)结束后,它就会调用AttackEnd(),从而我们就可以知道是否在攻击动画了。
三、自定义按钮控制精灵
在最前面我们已添加了ControlButton* btn;//按钮控件变量。。
只需要在void HelloWorld::update(float delta)(这可以看上一篇)增加即可 if(btn->isTouch)
相关新闻>>
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
- Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色按路径行走
- 结合cocos2d-x开发配置sublime text
- cocos2d-x开发: 如何从项目中分离出接口范例
- cocos2d-x在iOS/Android双平台上嵌入WebView
- Cocos2d-x 3.2 大富翁游戏项目开发-第十部分实现人物轮流行走
- cocos2d-x开发: 一切应该从配置文件读取开始
- 使用python创建cocos2d-x项目
- cocos2d-x 缓存
- quick-cocos2d-x教程11:实现http通信,并与网站php对接,可实现
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>