2014-03-24 70 views
0

我正在開發一個cocos2d遊戲,其中有一個名爲GamePlaylayer的CCLayer和名爲ShopLayer的另一個CCLayer。 ShopLayer是全屏圖層。 GamePlayLayer是touchnabled和有多個按鈕(CCMenuItemImage)。 ShopLayer可通過具有以下@選擇器的商店按鈕訪問。Cocos2d:如何停止從較高z順序層單擊較低z順序層的按鈕?

(void) onClickShop { 
    ShopLayer * shop = [[ShopLayer alloc] init]; 
    [self addChild:shop z:40]; } 

要停止觸摸傳播,我在ShopLayer中使用了CCTouchOneByOneDelegate和以下方法。

(void) onEnter { 
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self 
                   priority:0 swallowsTouches:YES]; 
    [super onEnter]; 
} 

(void) onExit { 
    [[[CCDirector sharedDirector] touchDispatcher] removeDelegate:self]; 

    [super onExit]; 
} 

(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 
    return YES; 
} 

現在它停止ccTouches開始調用GamePlayLayer,這很好。但它無法阻止GamePlayLayer的其他按鈕被調用。所以當我觸摸到放置GamePlayLayer按鈕的位置時,即使我看不到它們,它們也會被調用。

所以我的問題是如何停止從上層單擊下層的按鈕?

回答

0

使用kCCMenuHandlerPriority爲觸摸優先該類

[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES]; 
+0

謝謝!它像一個魅力。 – user3164248

+0

確實接受答案:) – Shubhank

+1

更好地解釋這一點,它被投票刪除。 –

0

SetTouch優先kCCMenuHandlerPriority。