这个系列进入第五课,在前边的课程中,我们分别学习了地图的添加、英雄的添加、摇杆添加以及英雄的控制,并且在上一课中,我们实现了边缘检测和地图滚动。

       本篇中,我们在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


1423723738169076.gif

之后在左上角放一个血条显示,将其添加进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


20150209175649979.jpg

结语

本篇添加了一个血条和攻击按键,使得我么的Hero可以播放攻击动画,每一帧都会更新血量,刷新血条状态,显示当前血量。

下一篇实现敌人的加入,并为其添加一些简单的AI。