Cocos2d-x--自定义血条
来源:互联网 发布:江苏省普通发票软件 编辑:程序博客网 时间:2024/05/16 11:32
运行效果图:
资源图片:
血条前景图:
血条背景图:
在HelloCpp项目中添加以下代码:
Progress.h:
#ifndef __PROGRESSVIEW_H__#define __PROGRESSVIEW_H__#include "cocos2d.h"using namespace cocos2d;class ProgressView : public CCNode{public: ProgressView();public: void setBackgroundTexture(const char *pName); void setForegroundTexture(const char *pName); void setTotalProgress(float total); void setCurrentProgress(float progress); float getCurrentProgress() const; float getTotalProgress() const;private: void setForegroundTextureRect(const CCRect &rect);private: CCSprite *m_progressBackground; CCSprite *m_progressForeground; float m_totalProgress; float m_currentProgress; float m_scale;};#endif
Progress.cpp:
#include "ProgressView.h"void ProgressView::setBackgroundTexture( const char *pName ){ m_progressBackground = CCSprite::create(pName); this->addChild(m_progressBackground);}void ProgressView::setForegroundTexture( const char *pName ){ m_progressForeground = CCSprite::create(pName); m_progressForeground->setAnchorPoint(ccp(0.0f, 0.5f)); m_progressForeground->setPosition(ccp(-m_progressForeground->getContentSize().width * 0.5f, 0)); this->addChild(m_progressForeground);}void ProgressView::setTotalProgress( float total ){ if (m_progressForeground == NULL) {return;} m_scale = m_progressForeground->getContentSize().width / total; m_totalProgress = total;}void ProgressView::setCurrentProgress( float progress ){ if (m_progressForeground == NULL) {return;} if (progress < 0.0f) {progress = 0.0f;} if (progress > m_totalProgress) {progress = m_totalProgress;} m_currentProgress = progress; float rectWidth = progress * m_scale; const CCPoint from = m_progressForeground->getTextureRect().origin; const CCRect rect = CCRectMake(from.x, from.y, rectWidth, m_progressForeground->getContentSize().height); setForegroundTextureRect(rect);}void ProgressView::setForegroundTextureRect( const CCRect &rect ){ m_progressForeground->setTextureRect(rect);}ProgressView::ProgressView() : m_progressBackground(NULL) , m_progressForeground(NULL) , m_totalProgress(0.0f) , m_currentProgress(0.0f) , m_scale(1.0f){}float ProgressView::getCurrentProgress() const{ return m_currentProgress;}float ProgressView::getTotalProgress() const{ return m_totalProgress;}
HelloScene.h:
#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"#include "ProgressView.h"class HelloWorld : public cocos2d::CCLayer{public: // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); // there's no 'id' in cpp, so we recommend returning the class instance pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); // implement the "static node()" method manually CREATE_FUNC(HelloWorld);private: ProgressView *m_pProgressView;};#endif // __HELLOWORLD_SCENE_H__
HelloScene.cpp:
#include "HelloWorldScene.h"#include "AppMacros.h"USING_NS_CC;CCScene* HelloWorld::scene(){// 'scene' is an autorelease objectCCScene *scene = CCScene::create();// 'layer' is an autorelease objectHelloWorld *layer = HelloWorld::create();// add layer as a child to scenescene->addChild(layer);// return the scenereturn scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){//////////////////////////////// 1. super init firstif ( !CCLayer::init() ){return false;}CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();/////////////////////////////// 2. add a menu item with "X" image, which is clicked to quit the program// you may modify it.// add a "close" icon to exit the progress. it's an autorelease objectCCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback));pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,origin.y + pCloseItem->getContentSize().height/2));// create menu, it's an autorelease objectCCMenu* pMenu = CCMenu::create(pCloseItem, NULL);pMenu->setPosition(CCPointZero);this->addChild(pMenu, 1);/////////////////////////////// 3. add your codes below...// add a label shows "Hello World"// create and initialize a labelCCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", TITLE_FONT_SIZE);// position the label on the center of the screenpLabel->setPosition(ccp(origin.x + visibleSize.width/2,origin.y + visibleSize.height - pLabel->getContentSize().height));// add the label as a child to this layerthis->addChild(pLabel, 1);// add "HelloWorld" splash screen"CCSprite* pSprite = CCSprite::create("HelloWorld.png");// position the sprite on the center of the screenpSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));// add the sprite as a child to this layerthis->addChild(pSprite, 0); //初始化ProgressView m_pProgressView = new ProgressView; m_pProgressView->setPosition(ccp(100, 100)); m_pProgressView->setScale(2.2f); m_pProgressView->setBackgroundTexture("background.png"); m_pProgressView->setForegroundTexture("foreground.png"); m_pProgressView->setTotalProgress(120.0f); m_pProgressView->setCurrentProgress(22.0f); this->addChild(m_pProgressView, 2);return true;}void HelloWorld::menuCloseCallback(CCObject* pSender){ float progress = m_pProgressView->getCurrentProgress() + 12.0f; m_pProgressView->setCurrentProgress(progress); CCLOG("%f", m_pProgressView->getTotalProgress()); CCLOG("%f", m_pProgressView->getCurrentProgress());}
0 0
- Cocos2d-x--自定义血条
- cocos2d-x 3.x 血条
- Cocos2d-x 自定义血条及其美化----之游戏开发《赵云要格斗》(4)
- Cocos2d-X 3.4版-自定义血量条《赵云要格斗》
- cocos2d-x 滚动条
- Cocos2d-x 自定义血条及其美化----之游戏开发《赵云要格斗》(4)cocos2dx 3.3移植版
- Cocos2d-x 自定义动画
- Cocos2d-x 自定义动画
- cocos2d-x 自定义字体
- cocos2d-x 添加广告条
- cocos2d-x 滚动条实现
- Cocos2d-X 添加广告条
- quick-cocos2d-x教程10:实现血条效果。
- cocos2d-x 自定义一个场景
- cocos2d-x 自定义精灵类
- cocos2d-x 自定义精灵类
- 【Cocos2d-x Lua】自定义TableView
- Cocos2d-x-3.2:自定义项目
- 注册表控制右键菜单(三)
- Project interpreter no…
- Python向服务器Post数据(可…
- python进行表单提交
- Cocos2D常用动作(Action)
- Cocos2d-x--自定义血条
- Java基础14--多线程
- leveldb实现原理
- Verilog中的function
- VS2008安装失败原因总结
- Esper学习之四:Context
- SVN服务器搭建和使用(一)
- iOS 面试题 OC 和 C++的区别
- 利用批处理文件实现自删除技术