加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x按钮CCControlButton的用法

发布时间:2020-12-14 16:49:13 所属栏目:百科 来源:网络整理
导读:1.按钮的创建 /* 正常状态下的按钮图片 */ CCScale9Sprite* btnNormal = CCScale9Sprite::create("button.png"); /* 点击状态下的按钮图片 */ CCScale9Sprite* btnDown = CCScale9Sprite::create("buttonHighlighted.png"); /* 按钮标题 */ CCLabelTTF *titl

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.按钮事件

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

/* 当鼠标处于按下并曾经点中按钮时,则触发一次 */
    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 不是指针,千万不要习惯了就给它加一个 * ~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读