转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。
上一篇: Cocos3.4 横版游戏制作-《KillBear》-边缘检测 地图滚动
上一篇中,我们实现了边缘检测+地图滚动 .
本篇中,我们在OperateLayer.cpp加入一个攻击按钮,实现Hero攻击
并在左上角加入一个血条显示
开发环境
win64 : vs2010
Cocos2d-x v3.4Final
TexturePackerGUI
MapEdit
代码构建A
Operate
OperateLayer
- .h
加入
void 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
代码构建
State
StateLayer
- .h
#include "HpShow.h"
- .cpp
init
auto 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.