0

我有这样的 CCNode 的 CCB 文件(因为我不能发布图像),

  1. CCNode - 自定义类(PanoController)
  2. -DrawerLayer - 它唯一的持有者,类型为 CCLayer
  3. --rawImage - 设置为 Doc root var,名称为:rawImage

我想让 rawImage 成为 mySprite 的实例,而不是 CCSprite ,因为它是默认的。

所以,加载器对于 mySprite 是这样的,

#include "mySprite.h"

class mySpriteLoader : public CCSpriteLoader{
public:
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(mySpriteLoader, loader);
protected:
    CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(mySprite);


};

mySprite.h 也是这个,

#include <iostream>
#include "cocos2d.h"
#include "cocos-ext.h"

using namespace cocos2d;
using namespace extension;

class mySprite : public CCSprite, public CCBMemberVariableAssigner {


public:
   // CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(mySprite, create);
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(mySprite, create);
    bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode){ return false; };


    mySprite(){CCLog("init mySprite");};



};

我也像这样注册了 mySprite 加载器,

m_loaderLibrary = CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
m_loaderLibrary->registerCCNodeLoader("mySprite", mySpriteLoader::loader());

并在来自父 CCLayer 的方法中设置 Member Assigner

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

    CCLOG("%s panoController Assign",pMemberVariableName);
    CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "rawImage", mySprite*, m_rawImage);

}

仍然会引发错误

Assertion failed: (m_rawImage), function onAssignCCBMemberVariable,

任何想法,请帮助。如果它的 CCSprite 工作正常,但 mySprite 不行。

4

1 回答 1

0

断言来自:

MEMBERVARIABLE = dynamic_cast<MEMBERVARIABLETYPE>(pNode);
CC_ASSERT(MEMBERVARIABLE);

node的类节点是CCSprite而不是MySprite。这意味着 CocosBuilder 无法设置自定义类 MySprite。

您可以在 AppDelegate.cpp 注册节点,如下所示:

const char *pClassName = "MySprite"
cocos2d::extension::CCNodeLoader *pCCNodeLoader = MySpriteLoader::loader();

cocos2d::extension::CCNodeLoaderLibrary * pCCNodeLoaderLibrary = cocos2d::extension::CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
pCCNodeLoaderLibrary->registerCCNodeLoader(pClassName, pCCNodeLoader);
于 2013-12-01T08:32:07.233 回答