cocos2d-x 2.0.3 一处有关于CCMenu的BUG修正

cocos2d-x 2.0.3 一处有关于CCMenu的BUG修正
当CCMenuItem处于按下状态(isSelected),此时外部调用CCMenuItem::removeFromParentAndCleanup或CCMenu::removeChild,对该CCMenuItem进行移除,引擎中并没有检查CCMenu记载的当前按下CCMenuItem是否为该被删除的CCMenuItem。这样会导致在后续的CCMenu::ccTouchMoved调用中,试图对CCMenu中记载的按下的CCMenuItem(已被删除)进行unselected操作,从而引发引擎崩溃。
解决方案:覆盖CCNode的removeChild方法,根据情形将m_pSelectedItem设置为NULL。

void CCMenu ::removeChild(CCNode* child, bool cleanup)
{
    CCMenuItem* pMenuItem = dynamic_cast(child);
    CCAssert(pMenuItem != NULL, "Menu only supports MenuItem objects as children");
    if (m_pSelectedItem == pMenuItem)
    {
        m_pSelectedItem = NULL;
    }
    CCNode::removeChild(pMenuItem, cleanup);
}

链接地址:http://hi.baidu.com/ligh0721/item/6bd9c5929930cbd87a7f01ee