cocos2dx開發 之 使用Button按鈕進行掉血事件(代碼內註釋詳細)

效果如下:

以下是頭文件

#include <cocos2d.h>
using namespace cocos2d;

#include "spine/spine.h"
#include "spine/spine-cocos2dx.h"
#include "../cocos2d/cocos/ui/UILoadingBar.h"  // 讀取進度條庫
#include "ui/CocosGUI.h"
using namespace ui;

class MyButton : public Scene
{
public:
	static Scene* createscene();
	CREATE_FUNC(MyButton);
	virtual bool init();
	void ComeBack(Ref* temp);

private:
	LoadingBar* bar;  //進度條顯示血量
};

cpp文件

#include "MyButton.h"
#include "SliderScene.h"
Scene* MyButton::createscene()
{
	return MyButton::create();
}

bool MyButton::init()
{
	if (!Scene::init())
	{
		return false;
	}

	auto visible = Director::getInstance()->getVisibleSize();

    //創建精靈
    auto _sprite = Sprite::create("timg2.png");
    this->addChild(_sprite);
    _sprite->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
    _sprite->setPosition(Director::getInstance()->getVisibleSize()/2);
    _sprite->setScale(0.6f);

	//創建進度條
	bar = LoadingBar::create();

    //錨點
	bar->setAnchorPoint(Vec2::ANCHOR_MIDDLE);

    //將座標設爲中心
	bar->setPosition(visible / 2);
	this->addChild(bar);

    //進度條從左開始
	bar->setDirection(LoadingBar::Direction::LEFT);

    //加載進度條資源
	bar->loadTexture("bar.jpg");

    //設置初始化血量也就是百分比
	bar->setPercent(100);

    //設置顯示比例
	bar->setScale(0.2);

    //創建對應的button按鈕
	auto button = Button::create("attack1.png", "attack2.png", "attack3.png");
	this->addChild(button);

    //設置按鈕錨點
	button->setAnchorPoint(Vec2::ANCHOR_BOTTOM_RIGHT);

    //提取寬度進行座標設置
	auto size = visible.width;
	button->setPositionX(size);
	button->setPositionY(0);

    //設置顯示比例
	button->setScale(0.5);

    //添加按鈕事件,按一下進行扣血
	button->addTouchEventListener([&](Ref* ref, ui::Widget::TouchEventType type)
		{
			//假如類型是按下時,那麼血條減10
			if (type == ui::Widget::TouchEventType::ENDED)
			{
				if (bar->getPercent() <= 0) //前體是還有血
				{
					auto button = dynamic_cast<Button*>(ref);  //轉換類型
					button->setEnabled(false);                //設置權限
					return;
				}

				bar->setPercent(bar->getPercent() - 10);  //進行扣血

			}
		});

}

void MyButton::ComeBack(Ref* temp) //回調函數
{
	Director::getInstance()->end();//場景推出
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章