cocos2d-x按钮CCControlButton的用法
2016-01-03 11:57
627 查看
1.按钮的创建
/* 正常状态下的按钮图片 */
CCScale9Sprite* btnNormal = CCScale9Sprite::create("button.png");
/* 点击状态下的按钮图片 */
CCScale9Sprite* btnDown = CCScale9Sprite::create("buttonHighlighted.png");
/* 按钮标题 */
CCLabelTTF *title = CCLabelTTF::create("Touch Me!3324234", "Marker Felt", 30);
/* 按钮的大小会根据标题自动调整 */
CCControlButton* controlBtn = CCControlButton::create(title, btnNormal);
/* 设置按钮按下时的图片 */
controlBtn->setBackgroundSpriteForState(btnDown, CCControlStateSelected);
controlBtn->setPosition(ccp(200, 200));
this->addChild(controlBtn);
其实代码很简单,两张图片,分别是按钮正常状态和点击状态图片,当然,她们都是九妹图片~
然后是一个标题标签,当然了,如果按钮没有标题,呢谁知道是什么作用呢~
最后要界面一个新的家伙: CCControlButton。
我是这么理解的,CCControlButton它只是一个空壳,它具备很多按钮所需要的功能(点击事件什么的),然后九妹图片和标题标签是内容,把内容添加到这个空壳里,一个按钮就诞生了:
但是有一点要注意,按钮的大小是根据标签内容进行缩放的,那,如果我想让按钮的大小固定呢?毕竟不是所有人都喜欢变化~!
很简单,就一句话:
/* 强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大 */
controlBtn->setPreferredSize(CCSize(300, 50));
2. 按钮事件
按钮怎么可能少了点击事件呢?~这个很简单,直接看代码,注释已经很详细了。
回调函数是这样的:
void touchDownAction(CCObject* pSender, CCControlEvent event);
void touchDragEnter(CCObject* pSender, CCControlEvent event);
void touchDragExit(CCObject* pSender, CCControlEvent event);
void touchDragInside(CCObject* pSender, CCControlEvent event);
void touchDragOutside(CCObject* pSender, CCControlEvent event);
void touchUpInside(CCObject* pSender, CCControlEvent event);
void touchUpOutside(CCObject* pSender, CCControlEvent event);
void touchCancel(CCObject* pSender, CCControlEvent event);
唯一要注意的是,CCControlEvent 不是指针,千万不要习惯了就给它加一个*号~
/* 正常状态下的按钮图片 */
CCScale9Sprite* btnNormal = CCScale9Sprite::create("button.png");
/* 点击状态下的按钮图片 */
CCScale9Sprite* btnDown = CCScale9Sprite::create("buttonHighlighted.png");
/* 按钮标题 */
CCLabelTTF *title = CCLabelTTF::create("Touch Me!3324234", "Marker Felt", 30);
/* 按钮的大小会根据标题自动调整 */
CCControlButton* controlBtn = CCControlButton::create(title, btnNormal);
/* 设置按钮按下时的图片 */
controlBtn->setBackgroundSpriteForState(btnDown, CCControlStateSelected);
controlBtn->setPosition(ccp(200, 200));
this->addChild(controlBtn);
其实代码很简单,两张图片,分别是按钮正常状态和点击状态图片,当然,她们都是九妹图片~
然后是一个标题标签,当然了,如果按钮没有标题,呢谁知道是什么作用呢~
最后要界面一个新的家伙: CCControlButton。
我是这么理解的,CCControlButton它只是一个空壳,它具备很多按钮所需要的功能(点击事件什么的),然后九妹图片和标题标签是内容,把内容添加到这个空壳里,一个按钮就诞生了:
但是有一点要注意,按钮的大小是根据标签内容进行缩放的,那,如果我想让按钮的大小固定呢?毕竟不是所有人都喜欢变化~!
很简单,就一句话:
/* 强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大 */
controlBtn->setPreferredSize(CCSize(300, 50));
2. 按钮事件
按钮怎么可能少了点击事件呢?~这个很简单,直接看代码,注释已经很详细了。
/* 当鼠标处于按下并曾经点中按钮时,则触发一次 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDownAction), CCControlEventTouchDown); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragEnter), CCControlEventTouchDragEnter); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragExit), CCControlEventTouchDragExit); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragInside), CCControlEventTouchDragInside); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragOutside), CCControlEventTouchDragOutside); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpInside), CCControlEventTouchUpInside); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpOutside), CCControlEventTouchUpOutside); /* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */ controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchCancel), CCControlEventTouchCancel);
回调函数是这样的:
void touchDownAction(CCObject* pSender, CCControlEvent event);
void touchDragEnter(CCObject* pSender, CCControlEvent event);
void touchDragExit(CCObject* pSender, CCControlEvent event);
void touchDragInside(CCObject* pSender, CCControlEvent event);
void touchDragOutside(CCObject* pSender, CCControlEvent event);
void touchUpInside(CCObject* pSender, CCControlEvent event);
void touchUpOutside(CCObject* pSender, CCControlEvent event);
void touchCancel(CCObject* pSender, CCControlEvent event);
唯一要注意的是,CCControlEvent 不是指针,千万不要习惯了就给它加一个*号~
相关文章推荐
- Cocos2dx 3.x创建Layer的步骤
- vs2012环境下,cocos2dx3.4 c++项目调用Lua的环境搭建
- 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
- cocos2d-x 新建项目 Cannot open include file: ‘cocos2d.h’
- cocos2dx 音效 粒子 数据存储
- cocosjs+ccs花屏解决
- cocos2d-x学习笔记【三】添加精灵及相关操作
- cocos2d-x main.cpp源码详析 v2.26
- cocos2d-x开发环境搭建及工程创建命令(v2.26&&v3.9)
- 【cocos2d-x 3.x 学习与应用总结】4: 理解CC_CALLBACK_0, CC_CALLBACK_1, CC_CALLBACK_2, CC_CALLBACK_3
- cocos2dx 碰撞检测
- cocos2d-x学习笔记【二】导演、场景、层。精灵介绍
- cocos2dx-触摸事件
- cocos2d-x frameworks 和 cocos引擎的关系
- cocos2d-x CCNode类
- 通过ccb(CocosBuilder)文件生成cocos2dx代码
- cocos2d-x学习笔记【一】创建自己的场景类
- Cocos2dx 3.0 简单的动作类
- cocos2d-x 3.9 异步动态加载
- cocostduio Text 控件 添加监听无法响应