![]()
UI控件来自cocos2dx的扩展库,完善了UI方面的元素,使cocos2dx更加丰富多彩。使用扩展库需包含:
| #include “cocos-ext.h” USING_NS_CC_EXT; |
CCControlSlIDer
| CCControlSlIDer * slIDer = CCControlSlIDer::create(“slIDerTrack.png”,”slIDerProgress.png”,”slIDerThumb.png”); |
第一个参数表示,slIDer滑动的轨道,即背景色。第二个参数表示滑动的进度。第三个参数表示拖动的按钮。
| 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; |
| 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() { scene = CCScene::create(); T12UI * layer = create(); scene->addChild(layer); return scene; }
//UI控件来自cocos2dx的扩展库,完善了UI方面的元素,使cocos2dx更加丰富多彩。使用扩展库需要包含 bool init() { TBack::init();
//第一个参数表示slIDer滑动的轨道,即背景色。第二个参数表示滑动的进度。 //第三个参数表示拖动的按钮 CCControlSlIDer *slIDer = CCControlSlIDer::create("slIDerTrack.png","slIDerProgress.png",21); Font-family:新宋体; Font-size:9.5pt">"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(slIDerCallBack),138); Font-family:新宋体; Font-size:9.5pt">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,21); Font-family:新宋体; Font-size:9.5pt">'.'); atlas->setAnchorPoint(ccp(0.5,0.5)); //设置字体的放大效果 atlas->setScale(2.0f); atlas->winSize.height / 2 + 30)); addChild(atlas);
slIDer->setValue(1.3f);
addChild(slIDer);
return true; }
//设置slIDer的回调函数 //这里的sender表示发送的一者 voID CCControlEvent event) { CCControlSlIDer * slIDer = (CCControlSlIDer *)sender;
getValue()); //因为成为了全局的了,所以能够访问的到 atlas->setString(str->getCString()); } |
| 运行结果: 最大值
最小范围:
最大范围: 运行结果在0.3和1.2之间 |
第一个参数,掩底背景图片,第二个参数为开的图片,第三个参数为关的图片,第四个参数为手指划到按钮,第五,六个参数分别为开和关显示的文字。
| 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",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”); } } |
5 CCControlSwitch案例说明
| T12UI.h |
| init();
//开关的回调函数 voID switchCallBack(init();
//通过SimpleAudioEngine的方式实现加载音乐 SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("audio/start.wav"); //创建开关、 //第一个参数为:掩底背景CCSprite //第二个参数为开的CCSprite //第三个参数为关的CCSprite //第四个参数为手指滑到CCSprite //第五个参数on的label //第六个参数为off的label CCControlSwitch *sw = CCControlSwitch::create( CCSprite::"switch-mask.png"), "switch-on.png"),21); Font-family:新宋体; Font-size:9.5pt">"switch-off.png"),21); Font-family:新宋体; Font-size:9.5pt">"switch-thumb.png"),133); Font-family:新宋体; Font-size:9.5pt">cclabelTTF::"ON",21); Font-family:新宋体; Font-size:9.5pt">"CourIEr New",21); Font-family:新宋体; Font-size:9.5pt">"OFF",20) ); //设置开关的位置 sw->winSize.height / 2)); sw->addTargetWithActionForControlEvents(this,0); Font-family:新宋体; Font-size:9.5pt">switchCallBack),138); Font-family:新宋体; Font-size:9.5pt">CCControlEventValueChanged);
//设置开关默认是关闭的 sw->seton(false); //将开关添加到Layer中去 addChild(sw);
return true; }
//开关的回调函数 voID CCControlSwitch * sw = (CCControlSwitch *)sender; if (sw->isOn()) { cclog("click On"); //通过playBackgroundMusic打开音乐 playBackgroundMusic("audio/start.wav"); } else { //通过stopBackgroundMusic()关闭音乐 stopBackgroundMusic("audio/start.wav"); "click off"); } } |
| 运行结果:
|
CCScale9Sprite对象,是一种CCSprite对象的变形,它的用法和CCSprite类似,不同点是:CCScale9Sprite对象有个特性就是缩放贴图时可以尽量不失帧。比如QQ聊天内边框
原理:
CCScale9Sprite的实现非常巧妙,是通过1个CCSpriteBatchNode和9个CCSprite来实现的,原理很简单,通过将原纹理资源切割成9部分(PS:这也是叫九宫图的原因)。根据想要的尺寸,完成以下三个步骤:
保持4个角部分不变形单向拉伸4条边(即在4个角两两之间的边,比如上边,只做横向拉伸)
双向拉伸中间部分(即九宫图的中间部分,横向,纵向同时拉伸,PS:拉伸比例不一定相同)
CCSpriteBatchNode的资源为整个的纹理,9 个CCSprite 对应于纹理的9
个部分(根据纹理不同,9 部分所占比例会有所不同),根据想要的尺寸,
将9 部分拼装在一起!
需要包含的头文件#include “cocos-ext.h” //包含cocos-ext.h头文件
using namespace cocos2d::extension; //引用cocos2d::extension 命名空间
使用说明:
CCScale9Sprite::create(const char* file,CCRect rect,CCRect,cAPInsets);
第一个参数为文件,第二个参数使用文件的大小,第三个参数如下,若未设置,或设置图分别如下:
我们知道CCSprite的拉伸方式是通过setScale();来实现的,而对于CCScale9Sprite则不同。它是通过setContentSize(constCCSize & size);来实现图片的拉伸。
测试代码:
| CCScale9Sprite * spr = CCScale9Sprite::create("scale9.png",CCRectMake(0,116,102),CCRectMake(40,30,40)); spr->setposition(ccp(winSize.wIDth/2,winSize.height/2)); addChild(spr); //spr->setScale(4.0f); spr->setPreferredSize(CCSizeMake(400,200)); |
关于CCScale9Sprite::create()
| T12UI.h |
| init(); };
#endif |
| CCScale9Sprite * s9spr = CCScale9Sprite::create( "scale9.png",138); Font-family:新宋体; Font-size:9.5pt">CCRectMake(0,138); Font-family:新宋体; Font-size:9.5pt">CCRectMake(30,40,56,20)); s9spr->winSize.height / 2)); addChild(s9spr); s9spr->setPreferredSize(CCSize(500,100)); return true; } |
| 运行结果:
|
| CCScale9Sprite * bgbutton = CCScale9Sprite::create("button.png"); //背景色图片 CCScale9Sprite * bgbuttonlighted = CCScale9Sprite::create("buttonHighlighted.png"); //背景色高亮图片 cclabelTTF * Titlebutton = cclabelTTF::create("touch Me","CourIEr New",30); //按钮的文本 CCControlbutton * button = CCControlbutton::create(Titlebutton,bgbutton); //创建按钮 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 {
}; typedef unsigned int CCControlEvent; |
| T12UI.h |
| init();
voID touchDownCallBack(CCControlEvent event); voID touchDragInsIDeCallBack(scene; }
bool init(); CCScale9Sprite *bgbutton = "button.png"); CCScale9Sprite *bgbuttonlighted = "buttonHighlighted.png"); cclabelTTF * text = "touch Me",21); Font-family:新宋体; Font-size:9.5pt">"CouIEr New",50);
CCControlbutton * button = CCControlbutton::create(text,bgbutton); //为按钮添加位置 button->winSize.height / 2)); button->setBackgroundSpriteForState(bgbuttonlighted,138); Font-family:新宋体; Font-size:9.5pt">CCControlStateHighlighted); button->setTitlecolorForState(ccRED,138); Font-family:新宋体; Font-size:9.5pt">CCControlStateHighlighted); addChild(button);
//为按钮添加监听事件,添加的是按钮被点击的事件 button->touchDownCallBack),138); Font-family:新宋体; Font-size:9.5pt">CCControlEventtouchDown); //为按钮添加监听事件,添加的是按钮Drag的事件 button->touchDragInsIDeCallBack),138); Font-family:新宋体; Font-size:9.5pt">CCControlEventtouchDragInsIDe);
return true; }
voID CCControlEvent event) { "touchDownCallBack"); }
voID "touchDragInsIDeCallBack"); } |
| 运行结果:
|
以上是内存溢出为你收集整理的1cocos2dx扩展库UI控件,CCControlSlider,CCScale9Sprite(九妹图),CCControlSwitch,CCControlButton全部内容,希望文章能够帮你解决1cocos2dx扩展库UI控件,CCControlSlider,CCScale9Sprite(九妹图),CCControlSwitch,CCControlButton所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)