cocosBuilderはcbbiファイルを生成し、cococos 2 d-xにバインドする
3366 ワード
今日は一日やったので、記録しておきます.
まずバージョンです.私が使っているcocosBuilder 3とcococos 2 d-x 2.1.2です.親測定cocosBuilder 2と最新バージョンのcocos 2 d-xは互換性がありません.
WARNINGと間違えました!Incompatible ccbi file version (file: 3 reader: 5).cocosBuilder 3にアップグレードし、XCodeとVS 2012のテストは問題ありません.
このシステムの原理は、まずcocosBuilderでそのファイルXXXに編集することです.ccb.その後、リリースされるファイルはccbiです.
cococos 2 dシステムにはCCBReaderライブラリがあり、ccbiファイルの情報をcococos 2 d-xが理解できるフォーマットに解読することができる.
しかし、事は想像していたほど美しくなく、花が牛の糞に刺さっているようだ.ccbiファイルがプログラムに読み込まれる過程は本当に気持ち悪い.
文句を言わないで、本題を言います.
まず、CCLayerのサブクラスを自分で書き、CCBSelectorResolverとCCBMemberVariableAssignerをそれぞれ継承します.
この2つのダミーベースクラスのインタフェースを実現します.また、CREATE_も書きます.FUNNCメソッドは、次のステップで使用されます.例:
では、定義を完了します.次は実現です.
対応する登録関数に関連付けを登録します.CCB_の使用SELECTORRESOLVER_CCMENUITEM_GLUE、 CCB_SELECTORRESOLVER_CCCONTROL_GLUE、 CCB_MEMBERVARIABLEASSIGNER_GLUEマクロは、対応する登録を完了する.例:
最後に、読み込み呼び出しです.まず、対応するLayerとLoaderをCCNodeLoaderLibraryに登録します.そしてCCBReaderで読みます.最後にreaderを呼び出す対応するメソッドは、リソースを解析します.たとえば
そうですね.問題は、それぞれ書くか、書くか、それとも2つ(layerとLoader)かです.このコードを見ていると本当に気分が悪い.夜家に帰って、何かいい方法があるかどうか考えてみましょう.
上のコードの山に対して、Good Luck For You.
このブログは阿修罗道から出ています.転載は出典を明記してください.http://blog.csdn.net/fansongy/article/details/8860630
まずバージョンです.私が使っているcocosBuilder 3とcococos 2 d-x 2.1.2です.親測定cocosBuilder 2と最新バージョンのcocos 2 d-xは互換性がありません.
WARNINGと間違えました!Incompatible ccbi file version (file: 3 reader: 5).cocosBuilder 3にアップグレードし、XCodeとVS 2012のテストは問題ありません.
このシステムの原理は、まずcocosBuilderでそのファイルXXXに編集することです.ccb.その後、リリースされるファイルはccbiです.
cococos 2 dシステムにはCCBReaderライブラリがあり、ccbiファイルの情報をcococos 2 d-xが理解できるフォーマットに解読することができる.
しかし、事は想像していたほど美しくなく、花が牛の糞に刺さっているようだ.ccbiファイルがプログラムに読み込まれる過程は本当に気持ち悪い.
文句を言わないで、本題を言います.
まず、CCLayerのサブクラスを自分で書き、CCBSelectorResolverとCCBMemberVariableAssignerをそれぞれ継承します.
この2つのダミーベースクラスのインタフェースを実現します.また、CREATE_も書きます.FUNNCメソッドは、次のステップで使用されます.例:
class MyLayer:public CCLayer,public CCBSelectorResolver,public CCBMemberVariableAssigner{
public:
CREATE_FUNC(MyLayer);
void enterPlay(CCObject *pSender);
void pressTitle(CCObject *pSender, CCControlEvent pCCControlEvent);
public:
//CCBSelectorResolver
virtual SEL_MenuHandler onResolveCCBCCMenuItemSelector(CCObject * pTarget, const char* pSelectorName) ;
virtual SEL_CCControlHandler onResolveCCBCCControlSelector(CCObject * pTarget, const char* pSelectorName) ;
//CCBMemberVariableAssigner
virtual bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode);
};
は、次いで、各Layerに対応して、さらに1つのLoderを書く.LoaderはCCLayerLoaderから継承されます.2つのことをする必要があります1、loaderメソッドを作成します.2、Loaderを対応するLayerに関連付ける.例:class MyLayerLoder :public CCLayerLoader{
public:
CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(MyLayer, loader);
CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(MyLayer);
};
では、定義を完了します.次は実現です.
対応する登録関数に関連付けを登録します.CCB_の使用SELECTORRESOLVER_CCMENUITEM_GLUE、 CCB_SELECTORRESOLVER_CCCONTROL_GLUE、 CCB_MEMBERVARIABLEASSIGNER_GLUEマクロは、対応する登録を完了する.例:
SEL_MenuHandler MyLayer::onResolveCCBCCMenuItemSelector(CCObject * pTarget, const char* pSelectorName)
{
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE( this, "pressPlay", MyLayer::enterPlay);
return NULL;
}
// :void pressTitle(CCObject *pSender);
SEL_CCControlHandler MyLayer::onResolveCCBCCControlSelector(CCObject * pTarget, const char* pSelectorName)
{
CCB_SELECTORRESOLVER_CCCONTROL_GLUE( this, "pressTitle", MyLayer::controlButtonTest);
return NULL;
}
bool MyLayer::onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode)
{
CCB_MEMBERVARIABLEASSIGNER_GLUE( this, "helloLabel", CCLabelTTF*, helloLabel);
return false;
}
最後に、読み込み呼び出しです.まず、対応するLayerとLoaderをCCNodeLoaderLibraryに登録します.そしてCCBReaderで読みます.最後にreaderを呼び出す対応するメソッドは、リソースを解析します.たとえば
CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary()->registerCCNodeLoader( "MyLayer", MyLayerLoder::loader());
CCBReader* reader = new CCBReader( CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary() );
reader->autorelease(); // run
pDirector->runWithScene(reader->createSceneWithNodeGraphFromFile("MyLayer"));
そうですね.問題は、それぞれ書くか、書くか、それとも2つ(layerとLoader)かです.このコードを見ていると本当に気分が悪い.夜家に帰って、何かいい方法があるかどうか考えてみましょう.
上のコードの山に対して、Good Luck For You.
このブログは阿修罗道から出ています.転載は出典を明記してください.http://blog.csdn.net/fansongy/article/details/8860630