您的位置:首页 > 移动开发 > Cocos引擎

【巴嘎日记】cocos2d-x CCMenuItem 在回调函数中清楚自身出现的Bug

2013-12-15 17:34 543 查看
void CCMenuItem::activate()
{
    if (m_bIsEnabled)
    {
        if (m_pListener && m_pfnSelector)
        {
            (m_pListener->*m_pfnSelector)(this);
        }
        
        if (kScriptTypeNone != m_eScriptType)
        {
            CCScriptEngineManager::sharedManager()->getScriptEngine()->executeMenuItemEvent(this);
        }
    }
}


Bug的位置

Bug发生时间:

点击一个CCMenuItem CCMenuItem的回调函数Remove他本身。

调用堆栈

Bug的位置

根据大神们的分析,这个Bug产生的理由是在CCMenuItem的回调函数中有Remove CCMenuItem的行为,当点击时,Delete了CCMenuItem但是CCMenuItem之前委托了在TouchDispathcer与里面的动作不能被取消,如CCTouchEnd,然后CCTouchEnd回来回调CCMenuItem,但此时的CCMenuItem已经被Release掉了。所以就出现了Bug。

然后上网好像有很多解决方案,但是么有一个能解决我的问题。Orz...TAT...

附上其他大神的解决方案

http://www.cocos2d-iphone.org/forums/topic/cctouchdispatcher-bug-ccmenu-bug/

http://hi.baidu.com/ligh0721/item/6bd9c5929930cbd87a7f01ee

或者直接Google CCMenuItem Bug
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: