Cocos2d 3.x中button的使用

在Cocos2d-x 3.x中有使用cocosGUI的Widget取代cocos2d-x extension中的控件的趋势,并且开始采用C++ 11中的一些新特性,比如Lambda表达式。下面用cocos2d::ui::Button的使用来展示一下cocosGUI中Widget的使用以及事件的添加。

在cocosGUI中的所有控件都继承自Widget,文件名采用了iOS标准控件类似的命名方法,比如UIButtonUITextField等。这些控件的应该也借鉴了iOS的做法,因此对熟悉iOS应用开发的人来说应该是一件好事。

UIButton是一个用于提供用户点击事件的控件,它能够显示图片和文字标题,并且能够在不同状态(NORMAL和 SELECTED)显示不同的图片。用户点击(touch或click)按钮后,会触发一个事件。我们通过给按钮添加事件监听器 (EventListener)就可以捕获这个动作。下面先创建一个按钮。

#include <CocosGUI.h> using namespace ui; //创建Button对象 Button *btn = Button::create("normal_menu.png", "press_menu.png"); //设置标题,标题属性(字体大小、字体、颜色等) btn->setTitleText("Go 戴维营教育"); btn->setTitleFontSize(28); //设置按钮位置 btn->setPosition(Vec2(200, 200)); //设置Tag值,标识按钮,从Widget继承的属性,作用与iOS中UIView的tag值类似。 btn->setTag(1002); //显示按钮 this->addChild(btn);
按钮在移动平台和PC端监听的事件不同,移动端一般监听 Touch事件,而PC端一般监听鼠标的 Click事件。
void addTouchEventListener(const ccWidgetTouchCallback& callback); void addClickEventListener(const ccWidgetClickCallback& callback);

这里的ccWidgetTouchCallback是一个std::function<void(Ref*,Widget::TouchEventType)>类型。我们可以给它设置Lambda表达式或者回调函数。

//1. 设置触摸回调函数 btn->addTouchEventListener(CC_CALLBACK_2(MenuScene::menuCallback, this)); //2. 使用lambda表达式设置回调[]()->{} //    btn->addTouchEventListener([=](Ref* pSender,Widget::TouchEventType type){ //        log("%p->%d", pSender, type); //    });

其中回调函数的格式为:

void MenuScene::menuCallback(Ref* pSender, Widget::TouchEventType type) {     Button *sender = (Button*)pSender;     log("%d", sender->getTag()); }

在cocos2d-x 3.3 rc0上测试过。

本文档由长沙戴维营教育整理。


转载于:https://my.oschina.net/diveinedu/blog/367376

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值