[cocos2dx]加載ccbi資源,以及引用ccb中cclayer相關成員變量的方式

定義一個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輸入框的二次修改,來滿足項目中的需求。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章