2013-04-09 79 views
0

我们正在研究cocos2d中的一个游戏,其中有可能获得琐事问题。琐事问题作为一个新的,透明的CCLayer在游戏板上实现,它包含一个包含所有问题的CCMenu。在cocos2d中停止触摸传播

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

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

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

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

有没有人有任何建议?

+0

为什么你“无法弄清楚如何重新启用骰子按钮”?它应该很容易,只需将'dice'对象保存在某个地方即可。 – 2013-04-10 04:35:49

回答

2

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

方法1(方法,我使用)

  1. 之前琐事问题弹出,使用下面的函数底层场景节点上禁用菜单。该方法是递归方法,因此它也禁用节点的子节点上的所有菜单。

  2. 当琐事问题被解除时,发送一个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

Docs创建一个无形的层,将吞下对智力问题层以下的所有接触。这里是你可以尝试的课程:https://gist.github.com/christophercotton/1563708