首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用/禁用CCMenu对象的更好方法

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

Stack Overflow用户
提问于 2012-12-01 01:01:12
回答 2查看 2.4K关注 0票数 4

/libs/cocos2d/Platforms/iOS/CCTouchDispatcher.m:108中的* -CCTouchDispatcher forceAddHandler::,断言失败 *终止应用程序由于非正常异常'NSInternalInconsistencyException',原因:‘委托已经添加到触摸调度程序。’。

导致这一现象的原因是

代码语言:javascript
复制
skillsMenu.isTouchEnabled = YES;

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

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

也许一开始就使用这句话是错误的。没有更好的方法来启用/禁用CCMenu吗?

cocos2d-iphone 1.0.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-01 02:28:16

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

在同一步骤中注册和注销触摸处理程序已经在过去造成了问题,尽管在最近的版本中,我相信这是固定的。

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

代码语言:javascript
复制
-(void) modifyMenu:(CCMenu*) menu withEnabledValue:(BOOL) enabled
{
    CCMenuItem *menuItem;
    CCARRAY_FOREACH(menu.children, menuItem)
    {
        [menuItem setIsEnabled: enabled ];
    }
}
票数 8
EN

Stack Overflow用户

发布于 2012-12-01 04:14:41

CCMenu有一个.enabled属性(可选),请使用该属性。与isTouchEnabled的不同之处在于菜单没有从touch dispatcher注册/取消注册。相反,当myMenu.enabled为false时,只需在CCMenu的ccTouchBegan委托方法中从一开始就忽略这些触摸。这样做更干净,并且避免了使用isTouchEnabled的陷阱(这是CCLayer类的属性,CCMenu对其进行了扩展)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13655320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档