理解:
- 将cocoStudio的ui控件转换成cocos的GUI控件来操作
- 通过widgetFromJsonFile()加载根容器Plane控件
- 通过Helper::seekWidgetByTag()寻找子控件
打开官方示例:
- 打开CMD
- CD到D:\cocos2d-x-3.3rc0\tests\cpp-tests\
- 执行cocos run -p win32命令
将class下所有的文件全部放到Sublime Text 3中:
- 查找文件CTRL+P:CocoStudio.h
- 发现底下有个:#include "cocostudio/CCSGUIReader.h"
- 接着查找:CCSGUIReader.h
导入头文件调用:(注意命名空间和强制类型转换类型)
- 将Json文件中的控件,转换成cocos2dx里面的ui控件来操作
- #include "cocostudio\CocoStudio.h"
- #include "ui\UIButton.h"
- using namespace cocostudio;
- using namespace ui;
注意类型转换的类型必须一一对应,比如TextField就是TextField,不能转换为TextFieldTTF:
- #include "HelloWorldScene.h"
- /* cocoStudio导出的Json文件 */
- #define JSON "DemoLogin.json"
- #define BTN_TAG 14
- #define EDIT_TEXT_NAME 8
- /* 设置命名空间 */
- USING_NS_CC;
- using namespace cocostudio;
- using namespace ui;
- using namespace std;
- Scene* HelloWorld::createScene()
- {
- auto scene = Scene::create();
- auto layer = HelloWorld::create();
- scene->addChild(layer);
- return scene;
- }
- bool HelloWorld::init()
- {
- if ( !Layer::init() )
- {
- return false;
- }
- /* 加载cocoStudio界面 */
- auto uiScene = GUIReader::getInstance()->widgetFromJsonFile(JSON);
- addChild(uiScene);
- /* 找到cocoStudio的控件,装换成coocs的gui控件(Helper须加载CocosGUI.h) */
- /* 按钮 */
- Button *btn = (Button*)(Helper::seekWidgetByTag(uiScene,BTN_TAG));
- /* 设置按钮点击事件(注意转换类型的对应) */
- btn->addTouchEventListener( this, toucheventselector(HelloWorld::touchEvent));
- /* 输入框(注意转换类型的对应,不是TextFieldTTF) */
- editText = (TextField*)(Helper::seekWidgetByTag(uiScene,EDIT_TEXT_NAME));
- return true;
- }
- /* 设置按钮点击事件 */
- void HelloWorld::touchEvent(Ref *pSender, TouchEventType type){
- switch (type)
- {
- case TOUCH_EVENT_BEGAN:
- CCLOG( "Began" );
- break;
- case TOUCH_EVENT_MOVED:
- break;
- case TOUCH_EVENT_ENDED:
- /* 输出输入框的内容 */
- CCLOG( editText->getString().c_str() );
- break;
- case TOUCH_EVENT_CANCELED:
- break;
- default:
- break;
- }
- }
FROM: http://blog.csdn.net/ns2250225/article/details/41961219
给cocos中添加响应事件的例子:
#include "ui/CocosGUI.h"
//获取屏幕大小
Size visibleSize = Director::getInstance()->getVisibleSize();
auto
widget = Widget::create();
widget->setContentSize(Size(100,100));
widget->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
widget->setTouchEnabled(
true
);
this
->addChild(widget);
widget->addTouchEventListener([](Ref *pSender, Widget::TouchEventType type){
switch
(type)
{
case
Widget::TouchEventType::BEGAN:
CCLOG(
"BEGAN"
);
break
;
case
Widget::TouchEventType::MOVED:
CCLOG(
"MOVED"
);
break
;
case
Widget::TouchEventType::ENDED:
CCLOG(
"ENDED"
);
break
;
case
Widget::TouchEventType::CANCELED:
CCLOG(
"CANCELED"
);
break
;
default
:
break
;
}
});
from:http://www.cocoachina.com/bbs/read.php?tid-289092.html