用一个空血槽图片的Sprite做背景,上面放一个ProgressTimer, 通过设置ProgressTimer的进度来控制血条的长短。建立一个Progress类来实现。
Progress.h:

  1. #ifndef __Progress__
  2. #define __Progress__
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5.  
  6. class Progress : public Sprite
  7. {
  8. public:
  9. bool init(const char* background, const char* fillname);
  10. /*
  11. the inputs are SpriteFrame Names.
  12. they should be loaded into SpriteFrameCache before calling this.
  13. */
  14. static Progress* create(const char* background, const char* fill);
  15.  
  16. void setFill(ProgressTimer* fill){_fill=fill;}
  17.  
  18. void setProgress(float percentage){_fill->setPercentage(percentage);}
  19.  
  20. private:
  21. ProgressTimer* _fill;
  22. };
  23. #endif

Progress.cpp:

  1. #include "Progress.h"
  2.  
  3. bool Progress::init(const char* background, const char* fillname)
  4. {
  5. this->initWithSpriteFrameName(background);
  6. ProgressTimer* fill = ProgressTimer::create(Sprite::createWithSpriteFrameName(fillname));
  7. this->setFill(fill);
  8. this->addChild(fill);
  9.  
  10. fill->setType(ProgressTimer::Type::BAR);
  11. fill->setMidpoint(Point(,0.5));
  12. fill->setBarChangeRate(Point(1.0, ));
  13. fill->setPosition(this->getContentSize()/);
  14. fill->setPercentage();
  15. return true;
  16. }
  17.  
  18. Progress* Progress::create(const char* background, const char* fillname)
  19. {
  20. Progress* progress = new Progress();
  21. if(progress && progress->init(background,fillname))
  22. {
  23. progress->autorelease();
  24. return progress;
  25. }
  26. else
  27. {
  28. delete progress;
  29. progress = NULL;
  30. return NULL;
  31. }
  32. }

init函数需要传入两个SpriteFrameName,所以UI资源需要在MainScene::init()函数中提前载入:

  1. SpriteFrameCache::getInstance()->addSpriteFramesWithFile("images/ui.plist","images/ui.pvr.ccz");

MainScene中需要添加一个Progress*类型的对象_progress:

  1. Progress* _progress;

代码中设置了ProgressTimer的参数,值得注意的有:
setType:设置类型为ProgressTimer::Type::BAR,血条自然是条状类的。
setMidpoint:设置血条的起点为(0,0.5),即左侧的中间点。
setBarChangeRate:设置变化率为(1,0),即在x轴变化率为1,y轴不变化。
setPercentage:设置血条填充率为100,即满血状态。
然后在MainScene::init()函数中添加:

  1. _progress = Progress::create("player-progress-bg.png","player-progress-fill.png");
  2. _progress->setPosition(_progress->getContentSize().width/, this->getContentSize().height - _progress->getContentSize().height/);
  3. this->addChild(_progress);

然后就会在窗口的左下角出现英雄的血条。效果如下:

接下来要给敌人添加血条。可以在Player中添加,但是这么做的话默认也给玩家添加了血条(敌人的血条是随着敌人的运动而运动的)。一种解决办法是隐藏英雄的血条。
在Player中增加私有变量_progress,并在init中进行初始化,增加bool型变量_isShowBar 用来通过角色类型判断是否显示。
Player::init中添加:

  1. auto size = this->getContentSize();
  2. _progress = Progress::create("small-enemy-progress-bg.png","small-enemy-progress-fill.png");
  3. _progress->setPosition( size.width*/, size.height + _progress->getContentSize().height/);
  4. this->addChild(_progress);
  5. if(!_isShowBar)
  6. {
  7. _progress->setVisible(false);
  8. }

运行程序便可以看到玩家和敌人的血条都显示了。

cocos2dx游戏--欢欢英雄传说--添加血条的更多相关文章

  1. cocos2dx游戏--欢欢英雄传说--添加游戏背景

    经过一段时间的学习cocos2dx,接下来我想要实践开发一个小游戏,我把它命名为“欢欢英雄传说”,项目名将取为HuanHero.环境:cocos2dx环境:cocos2d-x 3.11.1IDE:Co ...

  2. cocos2dx游戏--欢欢英雄传说--添加人物

    接下来需要导入精灵帧资源,因为之前下载了TexturePacker,然后通过TexturePacker的"Publish sprite sheet"方法可以生成一个.pvr.ccz ...

  3. cocos2dx游戏--欢欢英雄传说--为敌人添加移动和攻击动作

    这里主要为敌人添加了一个移动动作和攻击动作.移动动作是很简略的我动他也动的方式.攻击动作是很简单的我打他也打的方式.效果:代码: #ifndef __Progress__ #define __Prog ...

  4. cocos2dx游戏--欢欢英雄传说--添加攻击按钮

    接下来添加攻击按钮用于执行攻击动作.同时修复了上一版移动时的bug.修复后的Player::walkTo()函数: void Player::walkTo(Vec2 dest) { if (_seq) ...

  5. cocos2dx游戏--欢欢英雄传说--添加触摸响应

    主要的调整就是将HelloWorldScene改成了MainSecne,然后将Player作为了MainScene的私有成员变量来处理.修改了人物图片,使用了网上找到的三国战纪的人物素材代替我之前画的 ...

  6. cocos2dx游戏--欢欢英雄传说--添加动作

    添加完人物之后接着给人物添加上动作.我们为hero添加4个动作:attack(由3张图片构成),walk(由2张图片构成),hit(由1张图片构成),dead(由1张图片构成):同样,为enemy添加 ...

  7. Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...

  8. 【Cocos2d-x游戏引擎开发笔记(25)】XML解析

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...

  9. 【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注明出处 ...

随机推荐

  1. pthread_join直接决定资源是否能够及时释放

    /*http://hankjin.blog.163.com/blog/static/33731937201072675024100/ pthread的内存泄露 # cc thread.c -lpthr ...

  2. Android——用对话框做登陆界面(自定义对话框AlertDialog,多线程,进度条ProgressDialog,ListView,GridView,SharedPreferences存,读数据,存取文本,assets文件)

    效果: 1.点击图标进入页面二 2.页面2图片暂停显示5秒进入页面三 3.点击页面三登陆按钮,打开登陆对话框,输入密码进入页面四 点击下载按钮,显示水平进度条 点击保存和获取用户名和密码 进入页面六  ...

  3. Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes

    近期真的比較忙,一不小心博客又荒了两个月. 从今天起.决定重返csdn,多多纪录和分享. 先从一个近期被折磨的死去活来的问题. 由于升级了V4包,就一直报这个问题: com.android.dex.D ...

  4. js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. ssh加密公私钥

    SSH公钥登录原理 在平时工作中我们经常要远程登录服务器,这就要用到SSH协议: $ ssh user@host 主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录 密码口令登录 通过密码进行 ...

  6. Ajax-ajax实例2-根据邮政编码获取地区信息

    项目结构 运行效果: 数据库: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.5.53 : Database - ajaxexample_2 ******* ...

  7. 初学 Spring boot 报错 Whitelabel Error Page 404

    按照教程,写了个最简单的 HelloWorld,尼玛报错 -->Whitelabel Error Page 404. 网上99%都是项目结构不对,说什么 Application放在父级 pack ...

  8. 关于Cocos2d-x中数据的存储提取和类型转换

    1.获得存储在UserDefault中的变量,但是获得的变量是一个String类型的值,要用atoi函数转换为整型,但是atoi函数的传递参数是一个char*类型的值,所以用_Score.c_str( ...

  9. 关于Cocos2d-x中UI按钮的定义

    1.要有两张不同状态的图片 2.定义一个MenuItemSprite的实例,把这两张图的Sprite实例放进MenuItemSprite的实例 3.把MenuItemSprite的实例放进Menu实例 ...

  10. wex5中集成的mysql数据库 打开时一闪而过 报错

    在进程中kill mysql.exe 重新启动即可