2013-04-09 82 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