cocos2d-x 3.x 血条

血条的实现方式有好多种,常见的有用进度条来实现,利用精灵X轴缩放setScaleX,设置精灵矩形框大小等。当前血量和最大血量算出来比例,然后利用比例设置血条显示

我是通过设置精灵X轴缩放,给我的源码

.h

/*------血条------*/
class BloodVolumeWidget
{
public:
BloodVolumeWidget();
~BloodVolumeWidget();


void InitAttribute(Sprite* bgSprite, Sprite* showSprite, Node* parentNode);
void RefreshBlood(float currentValue, float maxVlaue);
private:
CC_SYNTHESIZE(Sprite*, m_pBloodBgSprite, pBloodBgSprite);
CC_SYNTHESIZE(Sprite*, m_pBloodShowSprite, pBloodShowSprite);
};


.cpp

BloodVolumeWidget::BloodVolumeWidget() :
m_pBloodBgSprite(nullptr),
m_pBloodShowSprite(nullptr)
{
}


BloodVolumeWidget::~BloodVolumeWidget()
{
}


void BloodVolumeWidget::InitAttribute(Sprite* bgSprite, Sprite* showSprite, Node* parentNode)
{
m_pBloodBgSprite = bgSprite;
m_pBloodShowSprite = showSprite;
parentNode->addChild(m_pBloodBgSprite);
parentNode->addChild(m_pBloodShowSprite);
m_pBloodBgSprite->setAnchorPoint(Vec2(0.0f, 0.5f));
m_pBloodShowSprite->setAnchorPoint(Vec2(0.0f, 0.5f));
m_pBloodBgSprite->setPosition(-m_pBloodBgSprite->getContentSize().width / 2, parentNode->getContentSize().height / 2 + 100);
m_pBloodShowSprite->setPosition(-m_pBloodShowSprite->getContentSize().width / 2, parentNode->getContentSize().height / 2 + 100);
m_pBloodShowSprite->setScaleX(0.5f);
}


void BloodVolumeWidget::RefreshBlood(float currentValue, float maxVlaue)
{
float scaleValue = currentValue / maxVlaue;
if (scaleValue > 1.0f)
scaleValue = 1.0f;
else if (scaleValue < 0.0f)
scaleValue = 0.0f;
m_pBloodShowSprite->setScaleX(scaleValue);
}



还有一种以进度条来做

.h

/*------血条------*/
class BloodVolumeWidget
{
public:
BloodVolumeWidget();
~BloodVolumeWidget();


void InitAttribute(Sprite* bgSprite, Sprite* showSprite, Node* parentNode);
void RefreshBlood(float currentValue, float maxVlaue);
private:
CC_SYNTHESIZE(Sprite*, m_pBloodBgSprite, pBloodBgSprite);
CC_SYNTHESIZE(ProgressTimer*, m_pBloodShowSprite, pBloodShowSprite);
};

.cpp

BloodVolumeWidget::BloodVolumeWidget() :
m_pBloodBgSprite(nullptr),
m_pBloodShowSprite(nullptr)
{
}


BloodVolumeWidget::~BloodVolumeWidget()
{
}


void BloodVolumeWidget::InitAttribute(Sprite* bgSprite, Sprite* showSprite, Node* parentNode)
{
m_pBloodBgSprite = bgSprite;
m_pBloodShowSprite = ProgressTimer::create(showSprite);
m_pBloodShowSprite->setType(ProgressTimer::Type::BAR);
m_pBloodShowSprite->setBarChangeRate(Vec2(1.0f, 0.0f));
m_pBloodShowSprite->setMidpoint(Vec2(1.0f, 0.0f));
m_pBloodShowSprite->setPercentage(100.0f);


parentNode->addChild(m_pBloodBgSprite);
parentNode->addChild(m_pBloodShowSprite);
m_pBloodBgSprite->setPosition(0, parentNode->getContentSize().height / 2 + 100);
m_pBloodShowSprite->setPosition(0, parentNode->getContentSize().height / 2 + 100);
}


void BloodVolumeWidget::RefreshBlood(float currentValue, float maxVlaue)
{
float percentValue = currentValue / maxVlaue;
if (percentValue > 1.0f)
percentValue = 1.0f;
else if (percentValue < 0.0f)
percentValue = 0.0f;
m_pBloodShowSprite->setPercentage(percentValue * 100.0f);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值