cocos2dx3.2开发 RPG《Flighting》(十)为角色加上血量条

一、前言
先说明一下,Role类其实是有很多属性的

protected:  
    /*与战斗相关的数据*/  
    int m_id;   //id  
      
    Role* m_attackTarget;  
    Role** m_attackTargetPtr;//攻击目标  
  
    Point m_desPoint;//目标位置  
      
    ROLE_STAT en_stat;  //当前状态  
      
    FlightLayer* m_layer;   //父控件  
  
  
    int m_speed;    //移动速度  
    int m_initSpeed;  
      
    int m_attackDistance;   //攻击距离  
    int m_initAttackDistance;  
  
    int m_hp;//生命值  
    int m_initHp;  
  
    int m_atk;//攻击力  
    int m_initAtk;  
  
    int m_defence;//防御力  
    int m_initDefence;  
  
    ROLE_TYPE m_type;//角色类型:Monster Or Hero  
      
    int m_atkHateValue;//攻击附带仇恨  
  
    bool m_isNaima;//是不是奶妈  
      
    std::string m_bulletImg;//子弹  
  
    int m_bulletSpeed;//子弹速度  
    int m_initBulletSpeed;  
  
    double m_atkSpeed;//攻击速度  
    double m_initAtkSpeed;  

```

每一个属性都有对应的get/set方法以后用到(例如攻击力,防御力,血量)的时候可能我不会提及,请大家原谅。

二、正文
血量条这个很基本,实现方法有很多种,我这里是调用ControlSlider这个控件
void Role::initHpSlider(){  
    m_hpSlider = ControlSlider::create("bloodbg.png","blood.png","sliderThumb.png");  
    m_hpSlider->setTouchEnabled(false);  
    m_hpSlider->setMaximumValue(m_initHp);  
    m_hpSlider->setMinimumValue(0);  
    m_hpSlider->setValue(m_hp);  
    m_hpSlider->setPosition(getHpSliderPos());  
    this->addChild(m_hpSlider);  
}  
  
Point Role::getHpSliderPos(){  
    return Point(0,0);  
}  

```

在update函数里面检测HP的值,并且改变血量条
void Role::update_hp(){  
    if(m_hpSlider){  
        m_hpSlider->setValue(m_hp);  
        m_hpSlider->setPosition(getHpSliderPos());  
    }  
}  

```

当我们的injured函数被触发的时候(被攻击),m_hp的值会改变,自然的,血量条也随之改变。

这里的getHpSliderPos函数的作用是被子类重写,并且设置血量条的位置,应为骨骼动画资源的大小不一(可能Boss体积就大一点),性质跟之前的offset_x,offset_y一样也是用于调整一下位置的。

我的csdn地址:http://blog.csdn.net/hezijian22
邮箱地址:578690286@qq.com
如有问题或指教,欢迎与我交流,谢谢。