cocosbuiler动画运用,运行时程序异常

  • 本帖最后由 XiaoCL 于 2013-4-16 18:01 编辑 *

在cocos2d-x中调用cocosbuilder的ccbi文件成功,运行中调用timeline时报错
请高人或者同遇到过类似情况的帮忙看看

具体信息:
ccb中设置了两个timeline,Intro和Loop,publish为ccbi文件

在cocos2d-x中读取ccbi:
CCScene * scene = CCScene::create();
CCNodeLoaderLibrary *lib = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary(); lib->registerCCNodeLoader(“MainMenuLayer”, MainMenuLayerLoader::loader());
CCBReader *reader = new CCBReader(lib); reader->autorelease(); CCNode node = reader->readNodeGraphFromFile(“MainMenuLayer.ccbi”, scene); CCBAnimationManager * animationManager = reader->getAnimationManager(); ((MainMenuLayer)node)->setAnimationManager(animationManager);
if(node != NULL) { scene->addChild(node); }

其中MainMenuLayer是ccb绑定的自定义类,其.h和.cpp部分相关代码如下:
MainMenuLayer.h
private: cocos2d::extension::CCBAnimationManager *mAnimationManager;
MainMenuLayer.cppbool MainMenuLayer::onAssignCCBMemberVariable(CCObject * pTarget, const char * pMemberVariableName, CCNode * pNode) {
CCLOG(“11111”);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, “mAnimationManager”, CCBAnimationManager *, this->mAnimationManager);
return false;
}
这个函数是将ccb里的某个object和代码里的变量绑定,我不知道"mAnimationManager"该在哪里设定,例子里面也没有,难道说是默认的变量?

void MainMenuLayer::setAnimationManager(cocos2d::extension::CCBAnimationManager *pAnimationManager)
{
CC_SAFE_RELEASE_NULL(mAnimationManager);
mAnimationManager = pAnimationManager;
CC_SAFE_RETAIN(mAnimationManager);
}

void MainMenuLayer::onRunTest(cocos2d::CCObject * pSender, cocos2d::extension::CCControlEvent pCCControlEvent)
{
CCLOG(“run test”);
//this->mAnimationManager->runAnimationsForSequenceIdTweenDuration(1, 0.3f);
this->mAnimationManager->runAnimationsForSequenceNamed(“Intro”);
}

编译没有问题,运行时,在 this->mAnimationManager->runAnimationsForSequenceNamed(“Intro”); 报错,断点如下:
CCBSequence* CCBAnimationManager::getSequence(int nSequenceId)
{
CCObject *pElement = NULL;
CCARRAY_FOREACH(mSequences, pElement)???这行是断点,报:Thread1: EXC_BAD_ACCESS(code=2, address=0x0)
{
CCBSequence seq = (CCBSequence)pElement;
if (seq->getSequenceId() == nSequenceId)
{
return seq;
}
}
return NULL;
}
我看了mSequences的地址是有的。。。

我也遇到这问题了 最后我发现
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, “mAnimationManager”, CCBAnimationManager *, this->mAnimationManager);
这句话根本没用

起作用的是
((AnimationsTestLayer*)animationsTest)->setAnimationManager(ccbReader->getAnimationManager());
这句 在HelloCocosBuilderLayer.cpp L161

写这个的人太蛋疼了…