[cocos2dx]加载ccbi资源,以及引用ccb中cclayer相关成员变量的方式

1 篇文章 0 订阅
1 篇文章 0 订阅

定义一个XXLoader的类,专门用来加载ccb资源。

---

class XXLoader

{


public:


/** load resource form ccbi */

static CCNode* loadFromCCBReader(const char* _CCBFileName,

                                     CCObject* _owner,

                                     CCBMemberVariableAssigner *_memberVariableAssigner = NULL,

                                     CCBSelectorResolver *_selectorResolver = NULL,

                                     CCNodeLoaderListener *_nodeLoaderListener = NULL);


};


CCNode* XXLoader::loadFromCCBReader(const char* _CCBFileName,

                                    CCObject* _owner,

                                    CCBMemberVariableAssigner *_memberVariableAssigner,

                                    CCBSelectorResolver *_selectorResolver,

                                    CCNodeLoaderListener *_nodeLoaderListener)

{

CCNodeLoaderLibrary* libary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();

CCBReader* reader = new CCBReader(libary, _memberVariableAssigner, _selectorResolver, _nodeLoaderListener);

    reader->setCCBRootPath("publish/");

libary->registerCCNodeLoader("XXTableView", XJTableViewLoader::loader());

    libary->registerCCNodeLoader("XXEditBox", XJEditBoxLoader::loader());

CCNode* node = reader->readNodeGraphFromFile(_CCBFileName, _owner);

reader->autorelease();


return node;

}

---

其中可以注册一些自定义类,这些自定义类名字要在cocosbuilder当中设定到custom class字段中。比如



接下来说明如何映射在cocosbuilder中设定的变量名称:

如上图所示,nameInput这个控件需要设定为Owner var的属性,在我们读取ccb的自定义cclayer类中,继承了接口类CCBMemberVariableAssigner,类定义如下示例:

class LoginScene : public XJView

,public CCBMemberVariableAssigner

,public CCNodeLoaderListener

,public CCEditBoxDelegate

{

public:


virtual ~LoginScene();

CREATE_FUNC(LoginScene);


virtual bool init();

virtual void onEnter();


virtual void onExit();


virtual bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode);


virtual void onNodeLoaded(CCNode * pNode, CCNodeLoader * pNodeLoader);

--------


其中实现

virtual bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode);

virtual void onNodeLoaded(CCNode * pNode, CCNodeLoader * pNodeLoader);

来进行成员变量的绑定。举例绑定nameInput这个成员变量,具体实现如下:

bool LoginScene::onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode)

{

//实现绑定对应名字的变量

CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "nameInput", XJEditBox*, m_pNumberInput);

return false;

}


void LoginScene::onNodeLoaded(CCNode * pNode, CCNodeLoader * pNodeLoader)

{

    //初始化获取自ccb得变量

    if(pNode == m_pNumberInput)

    {

        //设置只能输入数字

        m_pNumberInput->setInputMode(kEditBoxInputModeDecimal);

        //设置输入最大长度

        m_pNumberInput->setMaxLength(11);

        //设置Delegate

        m_pNumberInput->setDelegate(this);

m_pNumberInput->setPlaceHolder(StringManager::GetString(STR_XX_PLACEHOLDER)->getCString());

    }

}


总之,通过可视化的资源编辑工具cocosbuilder,读取ccbi资源,节省ui布局的工作,同时辅助定义一些ui对象的实现;但是cocosbuilder工具控件类型比较少,有些需要的效果控件需要二次开发,或者自定义逻辑,之后会说明一个editbox输入框的二次修改,来满足项目中的需求。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值