1. UI控件来自cocos2dx的扩展库。完好了UI方面的元素,使cocos2dx更加丰富多彩。使用扩展库需包括:

#include “cocos-ext.h”

USING_NS_CC_EXT;

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  1. CCControlSlider

CCControlSlider * slider = CCControlSlider::create(“sliderTrack.png”,”sliderProgress.png”,”sliderThumb.png”);

第一个參数表示。slider滑动的轨道。即背景色。

第二个參数表示滑动的进度。

第三个參数表示拖动的button。

slider->setMaximumValue(2.0f);  
//设置滑动最大值

slider->setMinimumValue(0.0f);  
//设置滑动最小值

slider->setValue(0.5f);          
//设置默认值

slider->setMaximumAllowedValue(1.2f);  
//设置某一个范围内的最大值

slider->setMinimumAllowedValue(0.3f);  
//设置某一个范围内的最小值

slider->addTargetWithActionForControlEvents(this,

cccontrol_selector(T12UI::controlCallback),

CCControlEventValueChanged);

设置事件的响应函数

typedef unsigned int CCControlEvent;

typedef void (CCObject::*SEL_CCControlHandler)(CCObject*, CCControlEvent);

#define cccontrol_selector(_SELECTOR)(SEL_CCControlHandler)(&_SELECTOR);

关于CCControlEvent

/** Kinds of possible events for the control objects. */

enum

{

CCControlEventTouchDown          
= 1 << 0,    // A touch-down event in the control.

CCControlEventTouchDragInside    
= 1 << 1,    // An event where a finger is dragged inside the bounds of the control.

CCControlEventTouchDragOutside   
= 1 << 2,    // An event where a finger is dragged just outside the bounds of the control.

CCControlEventTouchDragEnter     
= 1 << 3,    // An event where a finger is dragged into the bounds of the control.

CCControlEventTouchDragExit      
= 1 << 4,    // An event where a finger is dragged from within a control to outside its bounds.

CCControlEventTouchUpInside      
= 1 << 5,    // A touch-up event in the control where the finger is inside the bounds of the control.

CCControlEventTouchUpOutside     
= 1 << 6,    // A touch-up event in the control where the finger is outside the bounds of the control.

CCControlEventTouchCancel        
= 1 << 7,    // A system event canceling the current touches for the control.

CCControlEventValueChanged       
= 1 << 8      // A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.

};

typedef
unsigned
int
CCControlEvent;

  1. slider案例说明:

T12UI.h

#ifndef
__T12UI_H__

#define
__T12UI_H__

#include
"cocos2d.h"

#include
"TBack.h"

#include
"cocos-ext.h"

USING_NS_CC;

USING_NS_CC_EXT;

class
T12UI :public
TBack

{

public:

static
CCScene *
scene();

CREATE_FUNC(T12UI);

bool
init();

CCLabelAtlas *
atlas;

//slider的回调函数

void
sliderCallBack(CCObject*
sender,
CCControlEvent
event);

};

#endif

T12UI.cpp

#include
"T12UI.h"

#include
"AppMacros.h"

#include
"SimpleAudioEngine.h"

using
namespace
CocosDenshion;

CCScene *T12UI::scene()

{

CCScene *
scene =
CCScene::create();

T12UI *
layer =
T12UI::create();

scene->addChild(layer);

return
scene;

}

//UI控件来自cocos2dx的扩展库。完好了UI方面的元素,使cocos2dx更加丰富多彩。使用扩展库须要包括

bool
T12UI::init()

{

TBack::init();

//第一个參数表示slider滑动的轨道,即背景色。第二个參数表示滑动的进度。

//第三个參数表示拖动的button

CCControlSlider *slider
= CCControlSlider::create("sliderTrack.png","sliderProgress.png","sliderThumb.png");

//设置滑动最大值

slider->setMaximumValue(2.0f);

//设置滑动的最小值

slider->setMinimumValue(0.0f);

//设置默认值

slider->setValue(0.5f);

//设置某一范围内的最大值,当移动到了1.2之后移动不了了

slider->setMaximumAllowedValue(1.2f);

//设置某一范围内的最小值。向左移动到0.3之后移动不了了

slider->setMinimumAllowedValue(0.3f);

//设置slider的所在位置

slider->setPosition(ccp(winSize.width
/ 2,winSize.height/2 
- 30));

slider->addTargetWithActionForControlEvents(

this,

cccontrol_selector(T12UI::sliderCallBack),

CCControlEventValueChanged);

CCString *str
= CCString::createWithFormat("%.2g",
slider->getValue());

//第一个參数表示要显示的字符串

//第二个參数表示从哪张图片中取值

//第三个參数表示的是每一个字的宽度width

//第四个參数表示的是每一个字的高度

//第五个參数表示的是起始的字符

/* creates the CCLabelAtlas with a string, a char map file(the atlas),

the width and height of each element and the starting char of the atlas

*/

atlas =
CCLabelAtlas::create(

str->getCString(),

"fonts/fps_images.png",

12,32,'.');

atlas->setAnchorPoint(ccp(0.5,0.5));

//设置字体的放大效果

atlas->setScale(2.0f);

atlas->setPosition(ccp(winSize.width
/ 2, winSize.height
/ 2 + 30));

addChild(atlas);

slider->setValue(1.3f);

addChild(slider);

return
true;

}

//设置slider的回调函数

//这里的sender表示发送的一者

void
T12UI::sliderCallBack(CCObject*
sender,
CCControlEvent
event)

{

CCControlSlider *
slider = (CCControlSlider
*)sender;

CCString *str
= CCString::createWithFormat("%.2g",
slider->getValue());

//由于成为了全局的了,所以可以訪问的到

atlas->setString(str->getCString());

}

执行结果:

最大值

最小范围:

最大范围:

执行结果在0.3和1.2之间

  1. CCControlSwitch

第一个參数,掩底背景图片,第二个參数为开的图片,第三个參数为关的图片。第四个參数为手指划到button,第五。六个參数分别为开和关显示的文字。

CCControlSwitch * sw = CCControlSwitch::create(

CCSprite::create("switch-mask.png"),

CCSprite::create("switch-on.png"),

CCSprite::create("switch-off.png"),

CCSprite::create("switch-thumb.png"),

CCLabelTTF::create("ON","Courier New",20),

CCLabelTTF::create("OFF","Courier New",20)

);

设置时间触发后的响应函数

sw->addTargetWithActionForControlEvents(this,cccontrol_selector(T12UI::switchCallback),

CCControlEventValueChanged)

怎样在响应函数中获取选项

void T12UI::switchCallback(CCObject * sender,CCControlEvent event)

{

CCControlSwitch * sw = (CCControlSwitch *)sender;

If(sw->isOn())

{

CCLog(“On”);

} else {

CCLog(“off”);

}

}


CCControlSwitch案例说明

T12UI.h

#ifndef
__T12UI_H__

#define
__T12UI_H__

#include
"cocos2d.h"

#include
"TBack.h"

#include
"cocos-ext.h"

USING_NS_CC;

USING_NS_CC_EXT;

class
T12UI :public
TBack

{

public:

static
CCScene *
scene();

CREATE_FUNC(T12UI);

bool
init();

//开关的回调函数

void
switchCallBack(CCObject*
sender,
CCControlEvent
event);

};

#endif

T12UI.cpp

#include
"T12UI.h"

#include
"AppMacros.h"

#include
"SimpleAudioEngine.h"

using
namespace
CocosDenshion;

CCScene *T12UI::scene()

{

CCScene *
scene =
CCScene::create();

T12UI *
layer =
T12UI::create();

scene->addChild(layer);

return
scene;

}

//UI控件来自cocos2dx的扩展库,完好了UI方面的元素。使cocos2dx更加丰富多彩。

使用扩展库须要包括

bool
T12UI::init()

{

TBack::init();

//通过SimpleAudioEngine的方式实现载入音乐

SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("audio/start.wav");

//创建开关、

//第一个參数为:掩底背景CCSprite

//第二个參数为开的CCSprite

//第三个參数为关的CCSprite

//第四个參数为手指滑到CCSprite

//第五个參数on的label

//第六个參数为off的label

CCControlSwitch *sw
= CCControlSwitch::create(

CCSprite::create("switch-mask.png"),

CCSprite::create("switch-on.png"),

CCSprite::create("switch-off.png"),

CCSprite::create("switch-thumb.png"),

CCLabelTTF::create("ON",
"Courier New", 20),

CCLabelTTF::create("OFF",
"Courier New", 20)

);

//设置开关的位置

sw->setPosition(ccp(winSize.width
/ 2,winSize.height
/ 2));

sw->addTargetWithActionForControlEvents(this,

cccontrol_selector(T12UI::switchCallBack),

CCControlEventValueChanged);

//设置开关默认是关闭的

sw->setOn(false);

//将开关加入到Layer中去

addChild(sw);

return
true;

}

//开关的回调函数

void
T12UI::switchCallBack(CCObject*
sender,
CCControlEvent
event)

{

CCControlSwitch *
sw = (CCControlSwitch
*)sender;

if (sw->isOn())

{

CCLog("click
On");

//通过playBackgroundMusic打开音乐

SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav");

}

else

{

//通过stopBackgroundMusic()关闭音乐

SimpleAudioEngine::sharedEngine()->stopBackgroundMusic("audio/start.wav");

CCLog("click
off");

}

}

执行结果:

  1. CCScale9Sprite九妹图

CCScale9Sprite对象,是一种CCSprite对象的变形,它的使用方法和CCSprite类似,不同点是:CCScale9Sprite对象有个特性就是缩放贴图时能够尽量不失帧。比方QQ聊天内边框

原理:

CCScale9Sprite的实现非常巧妙。是通过1个CCSpriteBatchNode和9个CCSprite来实现的。原理非常easy,通过将原纹理资源分割成9部分(PS:这也是叫九宫图的原因)。

依据想要的尺寸,完毕下面三个步骤:

  1. 保持4个角部分不变形

  2. 单向拉伸4条边(即在4个角两两之间的边,比方上边,仅仅做横向拉伸)

  3. 双向拉伸中间部分(即九宫图的中间部分。横向,纵向同一时候拉伸,PS:拉伸比例不一定同样)

CCSpriteBatchNode的资源为整个的纹理。9
个CCSprite
相应于纹理的9

个部分(依据纹理不同,9
部分所占比例会有所不同)。依据想要的尺寸,

将9
部分拼装在一起!

  1. 须要包括的头文件

#include “cocos-ext.h”                   
//包括cocos-ext.h头文件

using namespace cocos2d::extension;      
//引用cocos2d::extension
命名空间

使用说明:

CCScale9Sprite::create(const char* file,CCRect rect, CCRect, capInsets);

第一个參数为文件。第二个參数使用文件的大小,第三个參数例如以下。若未设置,或设置图分别例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

我们知道CCSprite的拉伸方式是通过setScale();来实现的。而对于CCScale9Sprite则不同。它是通过setContentSize(constCCSize
& size);来实现图片的拉伸。

測试代码:

CCScale9Sprite * spr = CCScale9Sprite::create("scale9.png",CCRectMake(0, 0, 116, 102), CCRectMake(40, 30, 30, 40));

spr->setPosition(ccp(winSize.width/2,winSize.height/2));

addChild(spr);

//spr->setScale(4.0f);

spr->setPreferredSize(CCSizeMake(400,200));

关于CCScale9Sprite::create()

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

T12UI.h

#ifndef
__T12UI_H__

#define
__T12UI_H__

#include
"cocos2d.h"

#include
"TBack.h"

#include
"cocos-ext.h"

USING_NS_CC;

USING_NS_CC_EXT;

class
T12UI :public
TBack

{

public:

static
CCScene *
scene();

CREATE_FUNC(T12UI);

bool
init();

};

#endif

T12UI.cpp

#include
"T12UI.h"

#include
"AppMacros.h"

#include
"SimpleAudioEngine.h"

using
namespace
CocosDenshion;

CCScene *T12UI::scene()

{

CCScene *
scene =
CCScene::create();

T12UI *
layer =
T12UI::create();

scene->addChild(layer);

return
scene;

}

//UI控件来自cocos2dx的扩展库,完好了UI方面的元素,使cocos2dx更加丰富多彩。使用扩展库须要包括

bool
T12UI::init()

{

TBack::init();

CCScale9Sprite *
s9spr =
CCScale9Sprite::create(

"scale9.png",

CCRectMake(0, 0, 116, 102),

CCRectMake(30, 40, 56, 20));

s9spr->setPosition(ccp(winSize.width
/ 2, winSize.height
/ 2));

addChild(s9spr);

s9spr->setPreferredSize(CCSize(500,100));

return
true;

}

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  1. CControlButton

CCScale9Sprite * bgbutton = CCScale9Sprite::create("button.png");

//背景色图片

CCScale9Sprite * bgbuttonlighted =

CCScale9Sprite::create("buttonHighlighted.png");

//背景色高亮图片

CCLabelTTF * titlebutton = CCLabelTTF::create("Touch Me", "Courier

New", 30);

//button的文本

CCControlButton * button =

CCControlButton::create(titlebutton,bgbutton);

//创建button

button->setColor(ccc3(159, 168, 176));

//调色

button->setBackgroundSpriteForState(bgbuttonlighted,

CCControlStateHighlighted);

//按下后背景高亮

button->setTitleColorForState(ccWHITE,

CCControlStateHighlighted);

//按下后文本高亮

button->addTargetWithActionForControlEvents(this,cccontrol_selector(T12UI::buttonTouchDown));

button->addTargetWithActionForControlEvents(this,cccontrol_selector(T12UI::buttonTouchDown),CCControlEventTouchDown);

button->addTargetWithActionForControlEvents(this,cccontrol_selector(T12UI::buttonTouchDragInside),CCControlEventTouchDragInside);

响应的事件类型例如以下:

/** Kinds of possible events for the control objects. */

enum

{

CCControlEventTouchDown          
= 1 << 0,    // A touch-down event in the control.

CCControlEventTouchDragInside    
= 1 << 1,    // An event where a finger is dragged inside the bounds of the control.

CCControlEventTouchDragOutside   
= 1 << 2,    // An event where a finger is dragged just outside the bounds of the control.

CCControlEventTouchDragEnter     
= 1 << 3,    // An event where a finger is dragged into the bounds of the control.

CCControlEventTouchDragExit      
= 1 << 4,    // An event where a finger is dragged from within a control to outside its bounds.

CCControlEventTouchUpInside      
= 1 << 5,    // A touch-up event in the control where the finger is inside the bounds of the control.

CCControlEventTouchUpOutside     
= 1 << 6,    // A touch-up event in the control where the finger is outside the bounds of the control.

CCControlEventTouchCancel        
= 1 << 7,    // A system event canceling the current touches for the control.

CCControlEventValueChanged       
= 1 << 8      // A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.

};

typedef
unsigned
int
CCControlEvent;

T12UI.h

#ifndef
__T12UI_H__

#define
__T12UI_H__

#include
"cocos2d.h"

#include
"TBack.h"

#include
"cocos-ext.h"

USING_NS_CC;

USING_NS_CC_EXT;

class
T12UI :public
TBack

{

public:

static
CCScene *
scene();

CREATE_FUNC(T12UI);

bool
init();

void
touchDownCallBack(CCObject*
sender,
CCControlEvent
event);

void
touchDragInsideCallBack(CCObject*
sender,
CCControlEvent
event);

};

#endif

T12UI.cpp

#include
"T12UI.h"

#include
"AppMacros.h"

#include
"SimpleAudioEngine.h"

using
namespace
CocosDenshion;

CCScene *T12UI::scene()

{

CCScene *
scene =
CCScene::create();

T12UI *
layer =
T12UI::create();

scene->addChild(layer);

return
scene;

}

bool
T12UI::init()

{

TBack::init();

CCScale9Sprite *bgButton
= CCScale9Sprite::create("button.png");

CCScale9Sprite *bgButtonLighted
= CCScale9Sprite::create("buttonHighlighted.png");

CCLabelTTF *
text =
CCLabelTTF::create("Touch
Me",
"Couier New", 50);

CCControlButton *
button =
CCControlButton::create(text,
bgButton);

//为button加入位置

button->setPosition(ccp(winSize.width
/ 2, winSize.height
/ 2));

button->setBackgroundSpriteForState(bgButtonLighted,
CCControlStateHighlighted);

button->setTitleColorForState(ccRED,
CCControlStateHighlighted);

addChild(button);

//为button加入监听事件,加入的是button被点击的事件

button->addTargetWithActionForControlEvents(this,

cccontrol_selector(T12UI::touchDownCallBack),

CCControlEventTouchDown);

//为button加入监听事件,加入的是buttonDrag的事件

button->addTargetWithActionForControlEvents(this,

cccontrol_selector(T12UI::touchDragInsideCallBack),

CCControlEventTouchDragInside);

return
true;

}

void
T12UI::touchDownCallBack(CCObject*
sender,
CCControlEvent
event)

{

CCLog("touchDownCallBack");

}

void
T12UI::touchDragInsideCallBack(CCObject*
sender,
CCControlEvent
event)

{

CCLog("touchDragInsideCallBack");

}

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

版权声明:本文博客原创文章,博客,未经同意,不得转载。

1cocos2dx扩展UI控制,CCControlSlider,CCScale9Sprite(九妹图。),CCControlSwitch,CCControlButton的更多相关文章

  1. Android基础新手教程——1.6 .9(九妹)图片怎么玩

    Android基础新手教程--1.6 .9(九妹)图片怎么玩 标签(空格分隔): Android基础新手教程 1.本节引言: 可能有的一些疑问: 1.什么是.9图片? 答:图片后缀名前有.9的图片,如 ...

  2. UML总结4---UML九种图关系说明

    转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...

  3. UML 小结(6)- UML九种图的比较与学习

    UML中的九种图: 用例图.类图.对象图.状态图.时序图.协作图.活动图.部署图.构件图. 1)用例图(Use Case Diagram) 它是UML中最简单也是最复杂的一种图.说它简单是因为它采用了 ...

  4. UML总结---UML九种图关系说明

    UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图.组件图.配置图. 1)用例图(Use Case Diagram) 它是UML中最简单也是最复杂的一种图.说它简单是因为它采用了 ...

  5. UML九种图作用简介

    UML(统一建模语言):是面向对象的可视化建模语言. UML中有3种构造块:事物.关系和图,事物是对模型中最具有代表性的成分的抽象,关系是把事物结合在一起,图聚集了相关的事物 UML中有九种图如下: ...

  6. 转发-UI基础教程 – 原生App切图的那些事儿

    UI基础教程 – 原生App切图的那些事儿 转发:http://www.shejidaren.com/app-ui-cut-and-slice.html 移动APP切图是UI设计必须学会的一项技能,切 ...

  7. [UML]转:浅谈UML的概念和模型之UML九种图

    转自:http://blog.csdn.net/jiuqiyuliang/article/details/8552956 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UM ...

  8. QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

    QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...

  9. 讨论UML概念和模型UML九种图。

    文件夹: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图.在每一种视图中都包括一个或多种图. 本文我们重点解说UML每种图的细节问题: 1.用例图(use case d ...

随机推荐

  1. 第一次QQ群视频教育有感

    标题:第一次QQ群视频教育有感 作者:丁又专, 时间:2014.08.16     教育的目的:启示学生心智,发现个人优势,激发探索欲望.     今天早上看到 中国大学MOOC<文献管理与信息 ...

  2. iOS一个开发系列中 - UIButton 使用摘要

    // 初始化button并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 可以定义的UIButto ...

  3. OpenCV功能界面和示例

    OpenCV2.4.9 API Reference http://docs.opencv.org/modules/refman.html 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  4. JavaScript面向对象旅程(下)

    JavaScript面向对象旅程 剪不断,理还乱,是离愁. 前面已经提到过新语言开发的两个步骤,分别是:一.定义基本的数据类型,完善结构化编程语言的设计:二.为函数类型绑定this的概念,好在对象的方 ...

  5. ASP.NET MVC 3: Razor中的@:和语法

    原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...

  6. ActionBarActivity: cannot be resolved to a type

    "the import android.support.v7 cannot be resolved  " or "ActionBarActivity: cannot be ...

  7. Android 源码编译

    Google官方资料参考 http://source.android.com/source/building-running.html 1. 环境设置, 下载好源码后,进入源码目录,即之前执行 rep ...

  8. 怎样批量把excel中已显示的科学计数法取消

    作者:iamlaosong 把一文本文档拷贝到EXCEL中时,当中一列数字所有变成科学计数法,这些数事实上是条码号,不需进行运算,怎样能够取消科学计算法,将数字显示成原来的样子呢?一般方法例如以下: ...

  9. VMware 10设备CentOs 6.5

    最近的哥哥再次看到鸟,准备安装CentOs,一看最新的版本号为6.5,这本书5.X的,稍有不同点,二话不说,呵呵~ 矿VMware版本号是10.0.1 build-1379776 首先创建一个新的虚拟 ...

  10. HDU 3117 Fibonacci Numbers(围绕四个租赁斐波那契,通过计++乘坐高速动力矩阵)

    HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵高速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意:  求第n个斐波那契数的 ...