我们正在开发cocos2d中的游戏,其中有可能得到一个琐事问题。琐事问题在游戏板顶部实现为一个新的,透明的CCLayer,其中包含一个包含所有问题的CCMenu。
我们的问题是,我们似乎无法接触到正确的传播。当琐事菜单启动时,玩家不能点击棋盘图层上的“掷骰子”按钮。
我们尝试在添加琐事图层之前调用dice.isTouchEnabled=NO;
来实现此功能,但我们无法弄清楚如何重新启用骰子按钮。
我们还尝试将ccTouchBegan
从NO更改为YES以始终使用所有触摸,但随后它会停止响应我们的菜单。看来这应该是正确的方法,但为什么菜单会停止响应呢?
我们的教授建议实现一个回调函数,我们当然可以这样做,但看起来应该比这更容易。
有人有任何建议吗?
答案 0 :(得分:2)
我知道有两种方法可以做到这一点。
方法1(我正在使用的方法)
在弹出琐事问题之前,请使用以下函数禁用“基础场景”节点上的菜单。该方法是一种递归方法,因此它也会禁用节点子节点上的所有菜单。
当琐事问题被解除时,发送一个NSNotification,它将由底层场景节点接收,并将重新启用节点及其子节点上的菜单。您可以使用NSNotification的块方法来缩短代码。
addObserverForName:object:queue:usingBlock:
(void) MenuStatus:(BOOL)_enable Node:(id)_node {
for (id result in ((CCNode *)_node).children) {
if ([result isKindOfClass:[CCMenu class]]) {
for (id result1 in ((CCMenu *)result).children) {
if ([result1 isKindOfClass:[CCMenuItem class]]) {
((CCMenuItem *)result1).isEnabled = _enable;
}
}
}
else
[self MenuStatus:_enable Node:result];
}
}
方法2
创建一个不可见的图层,它将吞噬Trivia Question图层下面的所有触摸。您可以尝试以下课程:https://gist.github.com/christophercotton/1563708