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

前端之家收集整理的这篇文章主要介绍了cocos2dx3.2开发 RPG《Flighting》(十)为角色加上血量条前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、前言

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

  1. protected:
  2. /*与战斗相关的数据*/
  3. int m_id; //id
  4. Role* m_attackTarget;
  5. Role** m_attackTargetPtr;//攻击目标
  6.  
  7. Point m_desPoint;//目标位置
  8. ROLE_STAT en_stat; //当前状态
  9. FlightLayer* m_layer; //父控件
  10.  
  11.  
  12. int m_speed; //移动速度
  13. int m_initSpeed;
  14. int m_attackDistance; //攻击距离
  15. int m_initAttackDistance;
  16.  
  17. int m_hp;//生命值
  18. int m_initHp;
  19.  
  20. int m_atk;//攻击力
  21. int m_initAtk;
  22.  
  23. int m_defence;//防御力
  24. int m_initDefence;
  25.  
  26. ROLE_TYPE m_type;//角色类型:Monster Or Hero
  27. int m_atkHateValue;//攻击附带仇恨
  28.  
  29. bool m_isNaima;//是不是奶妈
  30. std::string m_bulletImg;//子弹
  31.  
  32. int m_bulletSpeed;//子弹速度
  33. int m_initBulletSpeed;
  34.  
  35. double m_atkSpeed;//攻击速度
  36. double m_initAtkSpeed;

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


二、正文

血量条这个很基本,实现方法有很多种,我这里是调用ControlSlider这个控件

  1. void Role::initHpSlider(){
  2. m_hpSlider = ControlSlider::create("bloodbg.png","blood.png","sliderThumb.png");
  3. m_hpSlider->setTouchEnabled(false);
  4. m_hpSlider->setMaximumValue(m_initHp);
  5. m_hpSlider->setMinimumValue(0);
  6. m_hpSlider->setValue(m_hp);
  7. m_hpSlider->setPosition(getHpSliderPos());
  8. this->addChild(m_hpSlider);
  9. }
  10.  
  11. Point Role::getHpSliderPos(){
  12. return Point(0,0);
  13. }


在update函数里面检测HP的值,并且改变血量条

  1. void Role::update_hp(){
  2. if(m_hpSlider){
  3. m_hpSlider->setValue(m_hp);
  4. m_hpSlider->setPosition(getHpSliderPos());
  5. }
  6. }

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

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


我的csdn地址:http://blog.csdn.net/hezijian22

邮箱地址:578690286@qq.com

如有问题或指教,欢迎与我交流,谢谢。

猜你在找的Cocos2d-x相关文章