这里为需要注意的是开启触屏的方法,以及NotificationCenter的用法有所改变。
这个类中我改动了一些代码,比如说SkellEnd时候没有就将Progresstimer设置为
setVisible(false),而是将它的percent设置为0,然后再冷却结束后又可以冲percent0开始播放动画。
Skillbutton.h
//// Skillbutton.h// fight//// Created by Cytzrs on 15/2/4.////#ifndef __fight__Skillbutton__#define __fight__Skillbutton__#include <iostream>#include "cocos2d.h"#include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT;class Skillbutton:public cocos2d::Layer{public: //创建冷却技能按钮,create 和 init 是连在一起的,调用create的时候必然会调用init static Skillbutton* create(const char* fore_name,const char* back_name); //初始化按钮 bool init(const char* fore_name,const char* back_name); //开始冷却技能 voID BeginSkill(); //冷却技能结束后 voID EndSkill(); //判断是否在冷却技能 bool IsSkilling; //开始触摸 virtual bool ontouchBegan(touch *ptouch,Event *pEvent); //触摸结束 virtual voID ontouchended(touch *ptouch,Event *pEvent); private: Sprite *fore;//fore是较亮的图片 Sprite *back;//back是较暗的图片 Progresstimer *pt;//技能效果 };#endif /* defined(__fight__Skillbutton__) */
Skillbutton.cpp
//// Skillbutton.cpp// fight//// Created by Cytzrs on 15/2/4.////#include "Skillbutton.h"Skillbutton* Skillbutton::create(const char* fore_name,const char* back_name){ Skillbutton* ret = new Skillbutton(); //这样写更安全一些 if(ret&&ret->init(fore_name,back_name)){ ret->autorelease(); return ret; } CC_SAFE_DELETE(ret);//安全删除 return nullptr;}bool Skillbutton::init(const char* fore_name,const char* back_name){ if(!Layer::init()){ return false; } fore=Sprite::create(fore_name);//fore_name是较亮的图片 this->addChild(fore,1); back=Sprite::create(back_name);//back_name是较暗的图片 pt=Progresstimer::create(back); this->addChild(pt,2); auto Listener = EventListenertouchOneByOne::create(); Listener->ontouchBegan = CC_CALLBACK_2(Skillbutton::ontouchBegan,this); Listener->ontouchended = CC_CALLBACK_2(Skillbutton::ontouchended,this); Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(Listener,this); return true;}//开始冷却技能voID Skillbutton::BeginSkill(){ //转圈的CD实现// pt->setType(cocos2d::ProgresstimerType(kCCProgresstimerTypeRadial)); pt->setType(Progresstimer::Type::RADIAL); Progressto *waittime=Progressto::create(8,100); //创建回调动作,技能冷却结束后调用EndSkill() CallFunc* callFunc=CCCallFunc::create(CC_CALLBACK_0(Skillbutton::EndSkill,this)); //创建连续动作 auto act = Sequence::create(waittime,callFunc,NulL); pt->setVisible(true); IsSkilling=true; pt->runAction(act); }//冷却技能结束后voID Skillbutton::EndSkill(){// pt->setVisible(false); pt->setPercentage(0.0f); IsSkilling=false; // NotificationCenter::sharednotificationCenter()->postNotification("jian_xue"); NotificationCenter::getInstance()->postNotification("jian_xue");}//判断是否点击的范围为精灵 如果是则执行动作voID Skillbutton::ontouchended(touch *ptouch,Event *pEvent){ if(IsSkilling) return; //判断是否点击在精灵上面 Point touchPoint = converttouchToNodeSpace(ptouch); if(fore->boundingBox().containsPoint(touchPoint)) { BeginSkill(); log("NotificationCenter::getInstance()->postNotification(jian_xue);"); }}//返回true表示支持触摸 返回false表示忽略bool Skillbutton::ontouchBegan(touch *ptouch,Event *pEvent){ return true;}工程源码 PS:多写博客,帮助自己,方便他人! 总结
以上是内存溢出为你收集整理的Cocos2d-X 3.4版-技能冷却按钮《赵云要格斗》全部内容,希望文章能够帮你解决Cocos2d-X 3.4版-技能冷却按钮《赵云要格斗》所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)