cocos2d-x按钮CCControlButton的用法

本文详细介绍了如何使用Cocos2d-x实现九妹图片的拉伸功能以及创建交互按钮,包括按钮创建、事件处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1. 九妹图片

相信做过Android开发的都很熟悉九妹这个词,其实她就是一种图片,一种支持拉伸的图片,由一张小图拉伸到一张大图,并且是,任意的~

这实在是太让人兴奋了,因为Cocos2d-x已经封装了这个功能了,来,迫不及待地要看看了:

  1. CCScale9Sprite* nineGirl = CCScale9Sprite::create("button.png");  
  2.     nineGirl->setContentSize(CCSize(200, 100));  
  3.     nineGirl->setPosition(ccp(300, 200));  
  4.     this->addChild(nineGirl);  


 

新建一个场景,然后添加这段代码,就能看到效果了:

稍微啰嗦一下,CCScale9Sprite,顾名思义,它是一张可拉伸的精灵(旁白:噗?精灵的单位是”张”?你确定?好像是”个”吧)。唔?好像听到有人喷我,不管了~

然后,button.png 是一张很小很小的图片:

只要给它设置一下大小:setContentSize(CCSize(200, 100));它就会自动拉伸,很神奇,很好用~


2. 按钮创建


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

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

很简单,就一句话:

  1. /* 强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大 */  
  2.     controlBtn->setPreferredSize(CCSize(300, 50));  


 

搞定~

3. 按钮事件

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

  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);  


 

回调函数是这样的:

  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 不是指针,千万不要习惯了就给它加一个*~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值