【Cocos2dx】利用音量螺旋控件控制血量条
2015-08-27 11:17
567 查看
其实主要是利用一个小例子来说明两个控件如何使用,一个是CCControlPotentiometer音量螺旋控件,另一个是如何利用CCControlSlider控件整出游戏中常见的血量条。
如图,随着音量螺旋控件的扭动,血量条在变化。
***过程如下:
一、基本准备
1、首先同样还是利用(cocos2d-x-2.2.6安装目录)\tools\project-creator下的create_project.py用python命令创建一个名为PotentiometerSlider的工程。这里在《【Cocos2dx】Windows平台下Cocos2dx 2.x的下载、安装、配置,打造自己的Helloworld》(点击打开链接)已经说过了,不再赘述。
2、之后,先打开(cocos2d-x-2.2.6安装目录)\samples\Cpp\TestCpp\Resources\Images中,拷贝两张图片到PotentiometerSlider的资源文件夹Resource中,分别是r1.png与r2.png,将作为这个音量螺旋控件的背景。
3、同时,如上图所示,开始->附件->画图,自己手工画3张图片,一张是大小为1x1的,什么都没有的图片1.png,一张是100x100背景为纯***的Yellow.png,一张是100x100背景近似黑色的灰色的Black.png,此两张图片直接利用其中的填充工具完成,只要Ctrl+E调好尺寸即可。直接保存到这个工程的资源文件夹中。
Cocos2dx的资源文件夹在《【Cocos2dx】资源文件夹,播放背景音乐,导入外部库》(点击打开链接)已经介绍过了,这里不再赘述。
二、程序编写
1、打开工程\PotentiometerSlider\proj.win32中的HelloCpp.sln,先对Helloworld.h中的回调函数(组件事件的执行方法)的声明进行修改,同时注意引入相应的类与命名空间。
2、之后是对HelloWorldScene.cpp修改,其实这部分与《【Cocos2dx】使用CCControlButton创建按钮、按钮点击事件,点击事件中的组件获取,setPosition的坐标问题》(点击打开链接)同样是组件操作的核心问题。这部分主要是两个组件的初始化与CCControlPotentiometer音量螺旋控件被扭动的回调函数。
如图,随着音量螺旋控件的扭动,血量条在变化。
***过程如下:
一、基本准备
1、首先同样还是利用(cocos2d-x-2.2.6安装目录)\tools\project-creator下的create_project.py用python命令创建一个名为PotentiometerSlider的工程。这里在《【Cocos2dx】Windows平台下Cocos2dx 2.x的下载、安装、配置,打造自己的Helloworld》(点击打开链接)已经说过了,不再赘述。
2、之后,先打开(cocos2d-x-2.2.6安装目录)\samples\Cpp\TestCpp\Resources\Images中,拷贝两张图片到PotentiometerSlider的资源文件夹Resource中,分别是r1.png与r2.png,将作为这个音量螺旋控件的背景。
3、同时,如上图所示,开始->附件->画图,自己手工画3张图片,一张是大小为1x1的,什么都没有的图片1.png,一张是100x100背景为纯***的Yellow.png,一张是100x100背景近似黑色的灰色的Black.png,此两张图片直接利用其中的填充工具完成,只要Ctrl+E调好尺寸即可。直接保存到这个工程的资源文件夹中。
Cocos2dx的资源文件夹在《【Cocos2dx】资源文件夹,播放背景音乐,导入外部库》(点击打开链接)已经介绍过了,这里不再赘述。
二、程序编写
1、打开工程\PotentiometerSlider\proj.win32中的HelloCpp.sln,先对Helloworld.h中的回调函数(组件事件的执行方法)的声明进行修改,同时注意引入相应的类与命名空间。
#include "cocos2d.h" #include "cocos-ext.h"//使用此组件,必须要需要的头文件 USING_NS_CC_EXT;//使用此组件,必须要需要的命名空间 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 valueChange(CCObject* pSender,CCControlEvent event);//声明CCControlPotentiometer音量螺旋控件被扭动之时的回调函数 // implement the "static node()" method manually CREATE_FUNC(HelloWorld); };
2、之后是对HelloWorldScene.cpp修改,其实这部分与《【Cocos2dx】使用CCControlButton创建按钮、按钮点击事件,点击事件中的组件获取,setPosition的坐标问题》(点击打开链接)同样是组件操作的核心问题。这部分主要是两个组件的初始化与CCControlPotentiometer音量螺旋控件被扭动的回调函数。
#include "HelloWorldScene.h" #include "cocos-ext.h"//使用此组件,必须要需要的头文件 USING_NS_CC; USING_NS_CC_EXT;//使用此组件,必须要需要的命名空间 //定义两个宏变量,主要是关于“血条”的最大值与最小值 #define CONTROL_SLIDER_MIN 0 #define CONTROL_SLIDER_MAX 10000 CCScene* HelloWorld::scene() { // 'scene' is an autorelease object CCScene *scene = CCScene::create(); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { //获取屏幕的尺寸、位置信息等 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); //新建一个音量螺旋控件CCControlPotentiometer CCControlPotentiometer *potentiometer=CCControlPotentiometer::create("r1.png","r2.png","CloseSelected.png");//第1个参数是按钮没扭动部分的背景图片、第2个是按钮扭动部分的背景图片、第3个是按钮的主题图片 potentiometer->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));//此组件居中 potentiometer->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChange), CCControlEventValueChanged);//第3个参数声明此组件被扭动时的回调函数是第2个参数所指明的函数 this->addChild(potentiometer);//将此控件添加到场景,默认不自动添加 //新建一个血条CCControlSlider CCControlSlider *controlSlider = CCControlSlider::create("Black.png","Yellow.png","1.png");//第1个参数是血条没有被占据的部分的背景图片,第2是血条被占据的部分的背景图片,第3个参数是条件按钮。 controlSlider->setPosition(ccp(visibleSize.width/2,visibleSize.height-visibleSize.height/6));//将此组件布置在距离上方还有窗口高度1/6的位置,水平居中 //设置按钮最大、最小值的基准 controlSlider->setMinimumValue(CONTROL_SLIDER_MIN); controlSlider->setMaximumValue(CONTROL_SLIDER_MAX); //------ controlSlider->setValue(CONTROL_SLIDER_MIN);//设置按钮当前值 //本来CCControlSlider是供用户调节的,调节按钮是1.png,但是1.png是一张1x1的近乎看不到的图片,同时利用setTouchEnabled(false)将此按钮锁上,禁止用户调节 controlSlider->setTouchEnabled(false); this->addChild(controlSlider,0,1);//将此控件添加到场景,同时设置Tag为1 return true; } void HelloWorld::valueChange(CCObject* pSender,CCControlEvent event){//这个HelloWorld::命名空间不能省,虽然在这个场景当中,但是缺少它,无法通过编译 CCControlPotentiometer *potentiometer=(CCControlPotentiometer *)pSender;//相当于this的作用,指代为被监听的音量螺旋控件CCControlPotentiometer CCControlSlider *controlSlider = (CCControlSlider *)this->getChildByTag(1);//获取血条 //potentiometer->getValue(),获取音量螺旋控件CCControlPotentiometer的值,此值为一个0-1的数值,为螺旋的部分占据总部分的百分比 //controlSlider->setValue设置血条的值,尽管controlSlider->setTouchEnabled(false);,但还是可以用代码控制的 controlSlider->setValue(potentiometer->getValue()*CONTROL_SLIDER_MAX); }
相关文章推荐
- Cocos2d-x -- 图片菜单按钮
- 【Cocos2d-x】 一个简单的将plist分割为原图的命令行工具
- How to change in the Cocos2d-x project from landscape to portrait both in iOS and Android
- 使用cocos compile -p android时总是报错误 BUILD FAILED \ant\build.xml:892
- cocos2d 3.x使用中遇到一些问题
- cocos2dx 玩转标签Label类
- cocos2dx 玩转Menu菜单
- cocos2dx 玩转简单数据存储
- cocos2dx 玩转音乐播放
- cocos2d js callfunc参数问题
- cocos2dx android 打包环境配置 安装包下载
- Cocos2dx学习笔记4:导演(Director)
- Cocos2dx学习笔记3:基础概念介绍
- Cocos2dx学习笔记2:初识游戏引擎
- cocos2dx 打包问题
- Cocos2dx学习笔记1:创建游戏项目解决方案
- cocos2dx 设置资源寻找路径
- Cocos2dx - 创建半透明层并屏蔽向下触摸
- Cocos2dx - getContentSize与getBoundingBox
- cocos studio设计界面,在代码中寻找按钮,设置监听函数等