这个系列进入第五课,在前边的课程中,我们分别学习了地图的添加、英雄的添加、摇杆添加以及英雄的控制,并且在上一课中,我们实现了边缘检测和地图滚动。
本篇中,我们在OperateLayer.cpp加入一个攻击按钮,实现Hero攻击,并在左上角加入一个血条显示。
开发环境
Win64:vs2010
Cocos2d-x v3.4Final
TexturePackerGUI
MapEdit
代码构建A
Operate
OperateLayer
.h
加入
1void attackButton(Ref* pSender);
.cpp
init中
auto visibleSize = Director::getInstance()->getVisibleSize();
//创造attackItem图标
auto attackItem = MenuItemImage::create("attackbuttonNormal.png","attackbuttonSelected.png",CC_CALLBACK_1(OperateLayer::attackButton,this));
//图标大小
attackItem->setScale(1.5);
//attackItem->setContentSize(Size(50,50));
//图标放在
attackItem->setPosition(visibleSize.width - attackItem->getContentSize().width/2-50, attackItem->getContentSize().height/2+20);
auto menu = Menu::create(attackItem,NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu,100);
void OperateLayer::attackButton(Ref* pSender)
{
global->hero->onAttack(1);
}
效果A
之后在左上角放一个血条显示,将其添加进StateLayer。
代码构建
State
StateLayer
.h
1#include "HpShow.h"
.cpp
init
1
2auto Hp = HpShow::create();
this->addChild(Hp);
新建一个HpShow
HpShow
.h
#ifndef _HP_SHOW_H_
#define _HP_SHOW_H_
#include "cocos2d.h"
#include "Global.h"
USING_NS_CC;
class HpShow : public Node
{
public:
HpShow();
~HpShow();
virtual bool init();
void update(float dt);
CREATE_FUNC(HpShow);
private:
ProgressTimer* m_preal;
};
#endif
.cpp
#include "HpShow.h"
HpShow::HpShow()
{
}
HpShow::~HpShow()
{
}
bool HpShow::init()
{
bool ret = false;
do {
CC_BREAK_IF( !Node::init());
auto visibleSize = Director::getInstance()->getVisibleSize();
//创建血条背景
Sprite* HeroHp = Sprite::create("bloodBg.png");
HeroHp->setPosition(HeroHp->getContentSize().width/2,
visibleSize.height-HeroHp->getContentSize().height/2);
this->addChild(HeroHp);
//一个ProgressTime类,能够设置其状态,百分比,显示类型等
m_preal = ProgressTimer::create(Sprite::create("blood.png"));
m_preal->setType(ProgressTimer::Type::BAR);
m_preal->setMidpoint(Point(0,0.5));
m_preal->setBarChangeRate(Point(1.0, 0));
m_preal->setPosition(HeroHp->getContentSize()/2);
m_preal->setPercentage(100);
HeroHp->addChild(m_preal);
this->scheduleUpdate();
ret = true;
} while(0);
return ret;
}
void HpShow::update(float dt)
{
//更新下血条状态
m_preal->setPercentage((float)global->hero->getCurtLifeValue()/global->hero->getSumLifeValue()*100);
}
结果B
结语
本篇添加了一个血条和攻击按键,使得我么的Hero可以播放攻击动画,每一帧都会更新血量,刷新血条状态,显示当前血量。
下一篇实现敌人的加入,并为其添加一些简单的AI。