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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值