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

修正cocos2d-x一处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<CCMenuItem *>(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

另外扩展里的switch在android下切出在切回会白屏,其他的扩展控件不会发生此现象