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上测试过。

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


你可能感兴趣的:(ios开发,cocos2d-x,游戏开发,戴维营教育)