本文主要是介绍cocos2d-x技能冷却效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、cocos2d-x技能冷却效果例子做了一个类似技能冷却的效果,当技能在cd中时没法点击使用技能,cd完成后可以点击技能拖动,使用完成后再次进入技能cd。技能的冷却效果使用CCActionInterval的子类CCProgressTo,这个类的使用方式很简单,CCProgressTo::create(10.0f, 100.0f),第一个参数是效果持续的时间,这里我们就可以说是技能的冷却时间,第二参数是设置百分比,可以理解为效果作用的对象的最终显示范围。这里为实现冷却的效果还需要CCProgressTimer这个类配合使用,这个类是CCNode的子类,可以实现一些纹理的载入特效,它以CCSprite作为对象创建,通过setTypeP()来设置具体效果,setType里的参数是一个枚举值,新版的cocos2d-x只包括两种效果,具体运行效果可查看cocos2d-x源码,然后修改例子工程代码setType方法里的值看到实际效果。
代码如下:
- bool SkillCd::init()
- {
- if(!CCLayer::init())
- {
- return false;
- }
- flag=false;//技能是否在CD中
- this->setTouchEnabled(true);
- size=CCDirector::sharedDirector()->getWinSize();
-
- CCSprite* background=CCSprite::create("background.jpg");
- background->setPosition(ccp(size.width*0.5, size.height*0.5));
- this->addChild(background);
-
- skillWait=CCSprite::create("cding.png");
- skillWait->setPosition(ccp(size.width-100, 80));
- this->addChild(skillWait,1);
-
- ready=CCSprite::create("ready.png");
- skillTimer=CCProgressTimer::create(ready);
- skillTimer->setPosition(ccp(size.width-100,80));
- skillTimer->setType(kCCProgressTimerTypeRadial);
- this->addChild(skillTimer,2);
-
- skillCooldown();
-
- return true;
- }
- void SkillCd::skillCooldown()
- {
- cdAction=CCProgressTo::create(10.0f, 100.0f);
- CCCallFunc* func=CCCallFunc::create(this, callfunc_selector(SkillCd::allowToClick));
- CCFiniteTimeAction* seq=CCSequence::create(cdAction,func,NULL);
- skillTimer->runAction(seq);
- }
- void SkillCd::allowToClick()
- {
- flag=true;
- }
- void SkillCd::registerWithTouchDispatcher()
- {
- CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
- }
- bool SkillCd::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
- {
- CCPoint nodeSpace=convertTouchToNodeSpace(pTouch);//这里需要坐标转换
- if(skillWait->boundingBox().containsPoint(nodeSpace))
- {
- if(flag)
- {
- point.x=pTouch->getLocation().x;
- point.y=pTouch->getLocation().y;
- scope=CCSprite::create("skillscope.png");
- scope->setPosition(point);
- this->addChild(scope,3);
-
- return true;
- }
- else
- {
- CCLog("Skill is cooling");
-
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- void SkillCd::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
- {
- point.x=pTouch->getLocation().x;
- point.y=pTouch->getLocation().y;
- scope->setPosition(point);
- }
- void SkillCd::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
- {
- this->removeChild(scope);
- flag=false;
- skillCooldown();//使用完毕,重新进入技能CD
- }
- void SkillCd::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
- {
- this->removeChild(scope);
- }
这篇关于cocos2d-x技能冷却效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!