启用/禁用CCMenu对象的更好方法

时间:2012-12-01 01:01:13

标签: cocos2d-iphone

  

*断言失败 - [CCTouchDispatcher forceAddHandler:array:],/ libs /cocos2d / Maps / iOS / CCTouchDispatcher.m:108

     

*由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'委托已添加到   触摸调度员。'

导致它的行是

skillsMenu.isTouchEnabled = YES;

skillsMenu只是CCMenu。我喜欢通常使用上面的行启用/禁用它。

问题是,我不知道如何正确解释这个错误 - 我不知道为什么设置这个属性会导致这样的错误。

首先使用该行可能是错误的。是否有更好的方法来启用/禁用CCMenu

cocos2d-iphone 1.0.1

2 个答案:

答案 0 :(得分:8)

isTouchEnabled注册/取消注册对象的触摸处理程序。

在同一步骤中注册和取消注册触摸处理程序在过去已经引起了问题,但在更新的版本中,我认为这已得到修复。

在任何情况下,如果您只是想暂时启用/禁用菜单,启用/禁用单个菜单项的问题就会少一些:

-(void) modifyMenu:(CCMenu*) menu withEnabledValue:(BOOL) enabled
{
    CCMenuItem *menuItem;
    CCARRAY_FOREACH(menu.children, menuItem)
    {
        [menuItem setIsEnabled: enabled ];
    }
}

答案 1 :(得分:2)

CCMenu有一个.enabled属性(setable),请改用它。与isTouchEnabled的区别在于菜单未从触摸调度程序注册/注销。相反,当myMenu.enabled为false时,从CCMenu的ccTouchBegan委托方法开始简单地忽略触摸。这更干净,并且避免了使用isTouchEnabled(这是CCLayer类的属性,CCMenu扩展)的陷阱。