/libs/cocos2d/Platforms/iOS/CCTouchDispatcher.m:108中的* -CCTouchDispatcher forceAddHandler::,断言失败 *终止应用程序由于非正常异常'NSInternalInconsistencyException',原因:‘委托已经添加到触摸调度程序。’。
导致这一现象的原因是
skillsMenu.isTouchEnabled = YES;skillsMenu只是一个CCMenu。我喜欢使用上面的行启用/禁用它。
问题是,我不知道如何正确地解释这个错误--我不知道为什么设置这个属性会导致这样的错误。
也许一开始就使用这句话是错误的。没有更好的方法来启用/禁用CCMenu吗?
cocos2d-iphone 1.0.1
发布于 2012-12-01 02:28:16
isTouchEnabled为对象注册/取消注册触摸处理程序。
在同一步骤中注册和注销触摸处理程序已经在过去造成了问题,尽管在最近的版本中,我相信这是固定的。
在任何情况下,如果您只是想暂时启用/禁用一个菜单,那么启用/禁用单个菜单项就不会有那么大的问题:
-(void) modifyMenu:(CCMenu*) menu withEnabledValue:(BOOL) enabled
{
CCMenuItem *menuItem;
CCARRAY_FOREACH(menu.children, menuItem)
{
[menuItem setIsEnabled: enabled ];
}
}发布于 2012-12-01 04:14:41
CCMenu有一个.enabled属性(可选),请使用该属性。与isTouchEnabled的不同之处在于菜单没有从touch dispatcher注册/取消注册。相反,当myMenu.enabled为false时,只需在CCMenu的ccTouchBegan委托方法中从一开始就忽略这些触摸。这样做更干净,并且避免了使用isTouchEnabled的陷阱(这是CCLayer类的属性,CCMenu对其进行了扩展)。
https://stackoverflow.com/questions/13655320
复制相似问题