
制作横版游戏KillBear第8课:技能及CD实现
发布日期:2021-05-10 00:54:01
浏览次数:17
分类:精选文章
本文共 5985 字,大约阅读时间需要 19 分钟。
���������������������������������������������������������������������������������������������������������������������(������)������������������������������������������������������������������������������������������������������������
1. ������������
- Win64 : vs2010
- Cocos2d-x v3.4Final
- TexturePackerGUI
- MapEdit
2. ������������
������������������ SkillButton
��������������������������������������������� SkillButton
���������������������
#ifndef _SKILL_BUTTON_H_#define _SKILL_BUTTON_H_#include "cocos2d.h"using namespace cocos2d;#include "Global.h"class SkillButton : public Node {public: SkillButton(); ~SkillButton(); static SkillButton* create(const char* Nomal, const char* Click, const char* Mask, float CDTime = 1.0f); static SkillButton* create(const char* Nomal, const char* Mask, float CDTime); static SkillButton* create(const char* Nomal, float CDTime); static SkillButton* create(const char* Nomal); CC_SYNTHESIZE(float, _cdtime, CDTime); void ClickCallBack(Ref* obj); void CoolDownCallBack(Node* node);private: bool init(const char* Nomal, const char* Click, const char* Mask, float CDTime); MenuItemImage* _ItemSkill; Sprite* _Mask; ProgressTimer* _ProgressTimer; Label* _atLabel; float CdTime; void CoolDownReduce(float dt);};#endif
#include "SkillButton.h"using namespace cocos2d;SkillButton::SkillButton() : _ItemSkill(NULL), _Mask(NULL), _cdtime(1.0f), _ProgressTimer(NULL) {}SkillButton::~SkillButton() {}SkillButton* SkillButton::create(const char* Normal, const char* Click, const char* Mask, float CDTime) { SkillButton* skillButton = new SkillButton(); if (skillButton && skillButton->init(Normal, Click, Mask, CDTime)) { skillButton->autorelease(); return skillButton; } CC_SAFE_DELETE(skillButton); return nullptr;}SkillButton* SkillButton::create(const char* Normal, const char* Mask, float CDTime) { return SkillButton::create(Normal, Normal, Mask, CDTime);}SkillButton* SkillButton::create(const char* Normal, float CDTime) { return SkillButton::create(Normal, Normal, Normal, CDTime);}SkillButton* SkillButton::create(const char* Normal) { return SkillButton::create(Normal, Normal, Normal, 1.0f);}bool SkillButton::init(const char* Normal, const char* Click, const char* Mask, float CDTime) { bool ret = false; do { if (!Node::init()) break; CCAssert(Mask, "SkillButton::init Mask != NULL"); CCAssert(Normal, "SkillButton::init Normal != NULL"); CCAssert(Click, "SkillButton::init Click != NULL"); _ItemSkill = MenuItemImage::create(Normal, Click, CC_CALLBACK_1(SkillButton::ClickCallBack, this)); _ItemSkill->setPosition(Vec2::ZERO); auto MenuSkill = Menu::create(_ItemSkill, NULL); MenuSkill->setPosition(Vec2::ZERO); addChild(MenuSkill, -100); if (Normal == Mask) { _Mask = Sprite::create(); _Mask->setTexture(Normal); _Mask->setColor(Color3B(0,0,0)); _Mask->setOpacity(100); } else { _Mask = Sprite::create(Mask); } _Mask->setPosition(Vec2::ZERO); _Mask->setVisible(false); addChild(_Mask, 0); _ProgressTimer = ProgressTimer::create(Sprite::create(Normal)); _ProgressTimer->setType(ProgressTimer::Type::RADIAL); _ProgressTimer->setPosition(Vec2::ZERO); _ProgressTimer->setVisible(false); addChild(_ProgressTimer, 100); this->setCDTime(CDTime); CdTime = CDTime; _atLabel = Label::create(); _atLabel->setSystemFontSize(_Mask->getContentSize().width / 3); _atLabel->setColor(Color3B(0,0,0)); _atLabel->setPosition(Vec2::ZERO); addChild(_atLabel, 200); _atLabel->setVisible(false); ret = true; } while (0); return ret;}void SkillButton::ClickCallBack(Ref* obj) { _ItemSkill->setEnabled(false); _Mask->setVisible(true); _ProgressTimer->setVisible(true); _atLabel->setVisible(true); this->schedule(schedule_selector(SkillButton::CoolDownReduce), 0.1f); global->hero->runChangeAttack(); ActionInterval* action_progress_to = Sequence::create( ProgressTo::create(this->getCDTime(), 100), NULL ); CallFunc* action_callback = CallFuncN::create(CC_CALLBACK_1(SkillButton::CoolDownCallBack, this)); _ProgressTimer->runAction(Sequence::create(action_progress_to, action_callback, NULL));}void SkillButton::CoolDownReduce(float dt) { _atLabel->setString(__String::createWithFormat("%.1f", CdTime - 0.1f)->getCString());}void SkillButton::CoolDownCallBack(Node* node) { _ItemSkill->setEnabled(true); _Mask->setVisible(false); _ProgressTimer->setVisible(false); _ProgressTimer->setPercentage(0); _atLabel->setVisible(false); CdTime = this->getCDTime(); this->unschedule(schedule_selector(SkillButton::CoolDownReduce));}
3. ������������
������������ create
���������������������������������������������������������������������������������������������������������������������
auto skillA = SkillButton::create("SkillButton.png", 3.0f);skillA->setPosition(attackItem->getPosition() - Vec2(50, 0));this->addChild(skillA);
4. ������������
- ���������������������������������������������������������������������������������������
- ���������������������������������������������������������������������
- ������������������������������������������������������������������������������������������
- ���������������������������������������������������������������������
5. ������tip
- ���������������������������������������������������������������������������
- ���������������������������������������������������������������������������������������������������������������������
������
������������ SkillButton
������������������������������������������������������������������������������������������������������������������������
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月02日 15时45分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
杭电OJ-2034(C)
2021-05-10
如何在excel2019指定的单元格中插入图片
2021-05-10
Java练习中的渣渣小点子,只给自己看的
2021-05-10
力扣-26题(Java)
2021-05-10
力扣-81题(Java)
2021-05-10
windows快捷键隐藏桌面所有窗口——“老板键”
2021-05-10
微信自定义分享ios无效
2021-05-10
this.$router.push不起作用(this指向错误)
2021-05-10
Sublime安装px转rem插件
2021-05-10
retrofit --post请求
2021-05-10
IDEA上传Jar
2021-05-10
SpringBoot工程临时加一个分页的yml文件没有生效
2021-05-10
搭建的SpringMVC项目,404错误,确保代码正确的前提,可能是jar包没导进去
2021-05-10
flume使用中的一些常见错误解决办法 (地址已经使用)
2021-05-10
基于递归的全排列
2021-05-10
前端笔试题总结(三) - CSS篇
2021-05-10
C语言字符型、整型和变量的长度
2021-05-10
OpenCV camshift目标追踪
2021-05-10
Redis缓存穿透和缓存雪崩
2021-05-10