在cocos2d中停止触摸传播

时间:2013-04-09 23:05:16

标签: ios objective-c cocoa-touch ios6 cocos2d-iphone

我们正在开发cocos2d中的游戏,其中有可能得到一个琐事问题。琐事问题在游戏板顶部实现为一个新的,透明的CCLayer,其中包含一个包含所有问题的CCMenu。

我们的问题是,我们似乎无法接触到正确的传播。当琐事菜单启动时,玩家不能点击棋盘图层上的“掷骰子”按钮。

我们尝试在添加琐事图层之前调用dice.isTouchEnabled=NO;来实现此功能,但我们无法弄清楚如何重新启用骰子按钮。

我们还尝试将ccTouchBegan从NO更改为YES以始终使用所有触摸,但随后它会停止响应我们的菜单。看来这应该是正确的方法,但为什么菜单会停止响应呢?

我们的教授建议实现一个回调函数,我们当然可以这样做,但看起来应该比这更容易。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:2)

我知道有两种方法可以做到这一点。

方法1(我正在使用的方法)

  1. 在弹出琐事问题之前,请使用以下函数禁用“基础场景”节点上的菜单。该方法是一种递归方法,因此它也会禁用节点子节点上的所有菜单。

  2. 当琐事问题被解除时,发送一个NSNotification,它将由底层场景节点接收,并将重新启用节点及其子节点上的菜单。您可以使用NSNotification的块方法来缩短代码。

  3. 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