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+lua[2]](/uploads/allimg/131030/110J64609-0-lp.jpg)








