Cocos2d 3.x中button的使用
戴维营教育原创文章,转载请注明出处。我们的梦想是做最好的iOS开发培训!
在Cocos2d-x 3.x中有使用cocosGUI的Widget取代cocos2d-x extension中的控件的趋势,并且开始采用C++ 11中的一些新特性,比如Lambda表达式。下面用cocos2d::ui::Button
的使用来展示一下cocosGUI中Widget的使用以及事件的添加。
在cocosGUI中的所有控件都继承自Widget
,文件名采用了iOS标准控件类似的命名方法,比如UIButton
、UITextField
等。这些控件的应该也借鉴了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上测试过。
本文档由长沙戴维营教育整理。