cocos studio2.x 对象绑定

cocos studio2.x 对象绑定,第1张

概述鉴于cocos studio2.x 绑定自定义事件过于复杂, 本大人总结了简单的实现方式, 类似ccbuilder的方法: 首先定义函数: Widget* CCBuilderLayer::getCSBUnit(const char* unitName){ return csbNode==nullptr? nullptr : ui::Helper::seekWidgetByName(csbN

鉴于cocos studio2.x 绑定自定义事件过于复杂,本大人总结了简单的实现方式,类似ccbuilder的方法:

首先定义函数:
Widget* CCBuilderLayer::getCSBUnit(const char* unitname){    return csbNode==nullptr? nullptr : ui::Helper::seekWidgetByname(csbNode,unitname);    Value va;}voID CCBuilderLayer::_bindCSBEvent(Node** WidgetVariable,BindEvent bindEvent,Node* Widget){    (*WidgetVariable) = Widget;    if ((*WidgetVariable)!=nullptr && bindEvent!=BindEvent::NONE) {        switch (bindEvent) {            case BindEvent::touch:                ((Widget*)(*WidgetVariable))->addtouchEventListener(CC_CALLBACK_2(MyClass::onbuttonClick,this));                break;            case BindEvent::Click:                ((Widget*)(*WidgetVariable))->addClickEventListener(CC_CALLBACK_1(MyClass::onMenuClick,this));                break;            default:                break;        }    }}voID CCBuilderLayer::onCSBBindVariable(Node* Widget){    //overwrite me}voID CCBuilderLayer::getCSBVariables(Node* Widget){    const auto& arrayRootChildren = Widget->getChildren();    for (auto& subWidget : arrayRootChildren){        Widget* child = dynamic_cast<Widget*>(subWidget);        onCSBBindVariable(child);    }}
然后定义宏:

定一个宏完全就是为了效率,免得每次递归都进入绑定函数

#define BindCSBEvent(WidgetVariable,Widgetname,bindEvent,Widget)\if(Widget->getname()==Widgetname){\_bindCSBEvent((Node**)&WidgetVariable,Widget);\cclOG("[CCBuilderDelegate] bind \"%s\" ok",bt->getname().c_str());\
其次在csb读取时进行绑定:
Node* CCBuilderLayer::initWithCSB(const char* csbPath){    csbNode = (Widget*)csloader::createNode(csbPath);    if (csbNode!=nullptr) {        auto size = Director::getInstance()->getVisibleSize();        csbNode->setContentSize(size);        ui::Helper::dolayout(csbNode);        addChild(csbNode);        {            onCSBBindVariable(csbNode); //这两句            getCSBVariables(csbNode); //这两句        }    }    return csbNode;}
最后就是在子类中实现它:
class HelloWorld : public CCBuilderLayer...voID HelloWorld::onCSBBindVariable(cocos2d::Node *Widget){    BindCSBEvent(bt,"bt_test",CCBuilderLayer::BindEvent::Click,Widget);}...//init中读取,很简单吧initWithCSB("ip4_Scene_Tree.csb");cclOG("xxx %s",bt->getname().c_str());
输出结果:

不要在意输出的内容多写了个e还是少写了个d,重要是点击csb内的按钮,可以调通了

官方自定义绑定方法: 英文教程 中文教程 本人不才,借鉴官方两个教程以及一个demo工程,绑定均未成功,而且官方的这种绑定方式要用到三个类来实现,其中还有个单例,我在想,如果多个界面(主界面,d窗,浮层等) 都同时存在,不考虑层级冲突,这种写法也是不可取的

总结

以上是内存溢出为你收集整理的cocos studio2.x 对象绑定全部内容,希望文章能够帮你解决cocos studio2.x 对象绑定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1071377.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存