发现cocosStudio1.5.0.1版本的一处bug

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();
    }
}

}