Creat" name="description" />

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学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
  • cocos2dx在xcode下开发,编译到android上(2)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1