CCActionManager类的一下方法调用时会崩溃
ActionObject* playActionByName(const char* jsonName,const char* actionName, CCCallFunc* func);
仔细检查了一下是由于CCActionObject的一个m_CallBack没有retain造成的,加入注释所示的两段代码即可。
void ActionObject::play(CCCallFunc* func)
{
this->play();
this->m_CallBack = func;
m_CallBack->retain();//这里的m_CallBack需要retain,不然值会随着func被autorelease掉
}
void ActionObject::simulationActionUpdate(float dt)
{
bool isEnd = true;
int nodeNum = m_ActionNodeList->count();
for ( int i = 0; i < nodeNum; i++ )
{
ActionNode* actionNode = (ActionNode*)m_ActionNodeList->objectAtIndex(i);
if (actionNode->isActionDoneOnce() == false)
{
isEnd = false;
break;
}
}
if (isEnd)
{
if (m_CallBack != NULL)
{
m_CallBack->execute();
CC_SAFE_RELEASE_NULL(m_CallBack);//此处调用过后要释放掉m_CallBack,否则非循环帧动画下会每帧都回调
}
if (m_loop)
{
this->play();
}
}
}