使用ui控件必须添加#include “ui/CocosGUI.h”(在.h文件中添加)和命名空间using namespace cocos2d::ui(在cpp文件中添加);
Widget *pWidget = dynamic_cast<Widget*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("NewUi_1.json"));
auto *btn =static_cast<Button *>(Helper::seekWidgetByName(pWidget, "Button_1"));
auto *text = static_cast<Text *>(Helper::seekWidgetByName(pWidget, "Label_15"));
text->setAnchorPoint(Vec2(0,0));
text->setText("xxxxxxxxxxxxxxxxxxxxxxxxx");
/* 设置按钮点击事件(注意转换类型的对应) */
btn->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEvent, this));
this->addChild(pWidget);
addTouchEventListener函数为按钮添加回调函数touchEvent
.h文件的声明处:
void touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type);
注意:因为.h文件没有using namespace cocos2d::ui,所以需要cocos2d::ui::指定类
.cpp文件的定义处:
void HelloWorld::touchEvent(Ref *pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
CCLOG(“lwlog::touch Begin”);
break;
case Widget::TouchEventType::MOVED:
CCLOG("lwlog::touch Move");
break;
case Widget::TouchEventType::ENDED:
{
CCLOG("lwlog::touch Ended");
}break;
case Widget::TouchEventType::CANCELED:
CCLOG("lwlog::touch Cancelled");
break;
default:
break;
}
}
这里的回调宏定义
// new callbacks based on C++11
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)
这里的0-3表示参数个数