Cocos2d-x version is 2.1.2
CocosBuilder version is 3.0
I create the Demo program with VS2010, and use CocosBuilder’s default project resource 『Hello CocosBuilder』.
And everything is fine until I want to make a callback function to terminate the program — You know, CocosBuilder default project couldn’t terminate itself.
I make MainBoardScene generate from cocos2d::extension::CCBSelectorResolver, and implement the virtual function onResolveCCBCCMenuItemSelector, add a break point at onResolveCCBCCMenuItemSelector, but it was never called.
cocos2d::SEL_MenuHandler MainBoardScene::onResolveCCBCCMenuItemSelector( CCObject * pTarget, const char* pSelectorName )
{
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "onPressButton", MainBoardScene::onPressButton);
return NULL;
}
I find output window logged the message: Skipping selector ‘onPressButton’ since no CCBSelectorResolver is present., then I trace the source code which print the message:
BlockData * CCNodeLoader::parsePropTypeBlock(CCNode * pNode, CCNode * pParent, CCBReader * pCCBReader) {
std::string selectorName = pCCBReader->readCachedString();
int selectorTarget = pCCBReader->readInt(false);
if(selectorTarget != kCCBTargetTypeNone) {
CCObject * target = NULL;
if(!pCCBReader->isJSControlled()) {
if(selectorTarget == kCCBTargetTypeDocumentRoot) {
target = pCCBReader->getAnimationManager()->getRootNode();
} else if(selectorTarget == kCCBTargetTypeOwner) {
target = pCCBReader->getOwner();
}
if(target != NULL) {
if(selectorName.length() > 0) {
SEL_MenuHandler selMenuHandler = 0;
CCBSelectorResolver * targetAsCCBSelectorResolver = dynamic_cast(target);
if(targetAsCCBSelectorResolver != NULL) {
selMenuHandler = targetAsCCBSelectorResolver->onResolveCCBCCMenuItemSelector(target, selectorName.c_str());
}
if(selMenuHandler == 0) {
CCBSelectorResolver * ccbSelectorResolver = pCCBReader->getCCBSelectorResolver();
if(ccbSelectorResolver != NULL) {
selMenuHandler = ccbSelectorResolver->onResolveCCBCCMenuItemSelector(target, selectorName.c_str());
}
}
if(selMenuHandler == 0) {
CCLOG("Skipping selector '%s' since no CCBSelectorResolver is present.", selectorName.c_str());
} else {
BlockData * blockData = new BlockData();
blockData->mSELMenuHandler = selMenuHandler;
blockData->mTarget = target;
return blockData;
}
} else {
CCLOG("Unexpected empty selector.");
}
} else {
CCLOG("Unexpected NULL target for selector.");
}
} else {
if(selectorTarget == kCCBTargetTypeDocumentRoot) {
pCCBReader->addDocumentCallbackNode(pNode);
pCCBReader->addDocumentCallbackName(selectorName);
} else {
pCCBReader->addOwnerCallbackNode(pNode);
pCCBReader->addOwnerCallbackName(selectorName);
}
}
}
return NULL;
}
CCBSelectorResolver targetAsCCBSelectorResolver = dynamic_cast<CCBSelectorResolver *>(target);* the targetAsCCBSelectorResolver was NULL, and after CCBSelectorResolver ccbSelectorResolver = pCCBReader->getCCBSelectorResolver();* ccbSelectorResolver is NULL too.
In CocosBuilder, I set “onPressButton” in the CCMenuItem’s selector and Target is Document root
Is there any important step I forgot to do in CocosBuilder, or just make a wrong step?