0

I have CCB file with CCNode like this (since i cannot post images),

  1. CCNode - Custom class (PanoController)
  2. -DrawerLayer - its only holder, of type CCLayer
  3. --rawImage - it is set as Doc root var with name : rawImage

I want to make rawImage to be instance of mySprite , not CCSprite as it is default.

So , The loader is like this for 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);


};

also the mySprite.h is this ,

#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");};



};

also i registered the mySprite loader like this,

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

and in the method from the parent CCLayer set 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);

}

Still it throws error

Assertion failed: (m_rawImage), function onAssignCCBMemberVariable,

Any ideas, please help. Its working fine if its CCSprite , but mySprite not.

b00yan
  • 1
  • 1

1 Answers1

0

The assertion come from :

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

The class node of node is CCSprite instead of MySprite. Which mean that CocosBuilder is fail to setup custom class MySprite.

You may register the node at AppDelegate.cpp as below :

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

cocos2d::extension::CCNodeLoaderLibrary * pCCNodeLoaderLibrary = cocos2d::extension::CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
pCCNodeLoaderLibrary->registerCCNodeLoader(pClassName, pCCNodeLoader);
Edric
  • 11
  • 1
  • 5