文档章节

cocos2d-x按钮CCControlButton的用法

乐逍遥jun
 乐逍遥jun
发布于 2016/02/22 21:37
字数 818
阅读 18
收藏 0

转载请注明,原文地址  http://blog.csdn.net/musicvs/article/details/8242963


1. 按钮创建


[cpp]    view plain   copy   print   ?  

  1. /* 正常状态下的按钮图片 */  

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

  3.   

  4.     /* 点击状态下的按钮图片 */  

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

  6.   

  7.     /* 按钮标题 */  

  8.     CCLabelTTF *title = CCLabelTTF::create("Touch Me!3324234""Marker Felt", 30);  

  9.   

  10.     /* 按钮的大小会根据标题自动调整 */  

  11.     CCControlButton* controlBtn = CCControlButton::create(title, btnNormal);  

  12.   

  13.     /* 设置按钮按下时的图片 */  

  14.     controlBtn->setBackgroundSpriteForState(btnDown, CCControlStateSelected);  

  15.     controlBtn->setPosition(ccp(200, 200));  

  16.     this->addChild(controlBtn);  


 

其实代码很简单,两张图片,分别是按钮正常状态和点击状态图片,当然,她们都是九妹图片~

然后是一个标题标签,当然了,如果按钮没有标题,呢谁知道是什么作用呢~

最后要界面一个新的家伙: CCControlButton

我是这么理解的,CCControlButton它只是一个空壳,它具备很多按钮所需要的功能(点击事件什么的),然后九妹图片和标题标签是内容,把内容添加到这个空壳里,一个按钮就诞生了:

但是有一点要注意,按钮的大小是根据标签内容进行缩放的,那,如果我想让按钮的大小固定呢?毕竟不是所有人都喜欢变化~

很简单,就一句话:

[cpp]    view plain   copy   print   ?  

  1. /* 强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大 */  

  2.     controlBtn->setPreferredSize(CCSize(300, 50));  


 

搞定~

2. 按钮事件

按钮怎么可能少了点击事件呢?~这个很简单,直接看代码,注释已经很详细了。

[cpp]    view plain   copy   print   ?  

  1. /* 当鼠标处于按下并曾经点中按钮时,则触发一次 */  

  2.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDownAction), CCControlEventTouchDown);  

  3.   

  4.     /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */  

  5.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragEnter), CCControlEventTouchDragEnter);  

  6.   

  7.     /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */  

  8.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragExit), CCControlEventTouchDragExit);  

  9.   

  10.     /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */  

  11.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragInside), CCControlEventTouchDragInside);  

  12.   

  13.     /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */  

  14.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragOutside), CCControlEventTouchDragOutside);  

  15.   

  16.     /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */  

  17.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpInside), CCControlEventTouchUpInside);  

  18.   

  19.     /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */  

  20.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpOutside), CCControlEventTouchUpOutside);  

  21.   

  22.     /* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */  

  23.     controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchCancel), CCControlEventTouchCancel);  


 

回调函数是这样的:

[cpp]    view plain   copy   print   ?  

  1. void touchDownAction(CCObject* pSender, CCControlEvent event);  

  2.    void touchDragEnter(CCObject* pSender, CCControlEvent event);  

  3.    void touchDragExit(CCObject* pSender, CCControlEvent event);  

  4.    void touchDragInside(CCObject* pSender, CCControlEvent event);  

  5.    void touchDragOutside(CCObject* pSender, CCControlEvent event);  

  6.    void touchUpInside(CCObject* pSender, CCControlEvent event);  

  7.    void touchUpOutside(CCObject* pSender, CCControlEvent event);  

  8.    void touchCancel(CCObject* pSender, CCControlEvent event);  


 

唯一要注意的是,CCControlEvent 不是指针,千万不要习惯了就给它加一个*~


© 著作权归作者所有

共有 人打赏支持
乐逍遥jun
粉丝 6
博文 79
码字总数 39510
作品 0
东城
技术主管
私信 提问
cocos2d-x中CCScale9Sprite的另一种实现

cocos2d 2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框...

李九仙
2014/05/15
0
0
Cocos2d-x 3.0rc0 的Win32工程添加CocoStudio库

在新建Cocos 3.0rc0的Win32的工程中添加CocoStudio的支持. 一 软件及其下载 1. Cocos2d-x 3.0rc http://cdn.cocos2d-x.org/cocos2d-x-3.0rc0.zip 2. CocoStudio 1.3 在CocoStudio 1.3中可以直......

千山万水
2014/06/10
0
0
【手机游戏开发】分享《Cocos2D-X游戏开发技术精解(第2版)》电子版

内 容 提 要 Cocos2D-X是一款支持多平台的 2D 手机游戏引擎,支持iOS、Android、WinPhone等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 本书详细介绍如何使用Cocos...

不问旧梦
2015/11/19
108
0
Cocos2d-X 单机麻将

COCOS2D-X 单机麻将 项目介绍 基于最新版 Cocos2d-X 3.17 与 cocostudio V3.10 开发的单机麻将游戏,麻将算法为商业级麻将服务器端算法,整个项目代码精简、注释详细。 如果你刚刚接触Cocos...

xiyoufang
2018/07/09
0
0
【手机游戏开发】分享《Cocos2D-X游戏开发技术精解(第2版)》电子版

内 容 提 要: Cocos2D-X是一款支持多平台的 2D 手机游戏引擎,支持iOS、Android、WinPhone等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 本书详细介绍如何使用Coc...

不问旧梦
2015/11/19
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

js数组遍历和对象遍历

数组遍历 for for(var i=0,len=arr.length;i<len;i++){console.log(arr[i]);} forEach - ES5语法,性能比for弱,不能使用break终止循环,不能使用return arr.forEach(function(item,inde......

祖达
25分钟前
2
0
Java网络编程

基本概念 网络IO会涉及到同步,异步,阻塞,非阻塞等几个概念。 一个网络IO读取过程是数据从 网卡 到 内核缓冲区 到 用户内存 的过程。同步和异步区别在于数据从内核到用户内存的过程是否需要...

春哥大魔王的博客
47分钟前
2
0
Spring "reg:zookeeper" 的前缀 "reg" 未绑定等类似问题解决方案。

今天同事遇到一个Spring启动加载配置文件时,不识别reg:zookeeper标签的问题。 我查看配置,发现是Spring配置文件的头部没有引入reg标签的命名空间,具体如下图: 所以,以后遇到类似的标签未...

花漾年华
今天
2
0
阿里云领衔云市场

近期,2018年Q4及全年的全球云基础设施服务市场数据新鲜出炉,发布方是美国市场研究机构Synergy Research Group。这个机构是专做电信网络市场情报的公司,成立于1999年,每年都会公布各大公有...

linuxCool
今天
2
0
C++友元函数和友元类(C++ friend)详解

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书...

shzwork
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部