2012-09-19 116 views
3

我想玩觸摸。我有問題的觸摸例如優先級,當我使用的是在具有setTouchEnabled(true)觸摸優先級在cocos2d/cocos2d-x

或圖層添加CCMenuItemSpriteCCControlButton即使我把 我發現什麼是觸摸不首先給ccTouchesBegan( ...我的意思是圖層),而不是由CCMenuItemSpriteCCCOntrolButton回叫。

此外,如果我在所有圖層上添加一個額外的圖層,並且同樣的結果,我會得到 觸摸首先被賦予menuitem和控制按鈕,觸摸後會吞下觸摸。

有沒有什麼辦法,使我們能夠改變觸摸的優先級?或 有沒有什麼辦法讓我可以重寫CCControlButtonCCMEnuItemSprite ... ccTouchesBegan或移動畢竟 我想要的CCMenuItemCControlButton 否則我不得不重新考慮CCSprite觸摸位置?

回答

2

覆蓋您CCLayer的方法

YOUR_LAYER::registerWithTouchDispatcher{ 
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN, true); 
} 
2

可以在CCMenu.h

enum { 
    //* priority used by the menu for the event handler 
    kCCMenuHandlerPriority = -128, 
}; 

如果你想使一些層發現這使菜單的默認優先級設置爲-128,檢測觸摸前CCMenu,儘量它們的優先級設置爲小於-128

0

這將首先檢測僅依賴於窗口小部件的優先級接觸,我覺得你爲什麼一直困惑是,你可能會認爲這是依賴於Widget.So的ZORDER,你可以改變你添加的層的優先級,並保證優先級小於的菜單項的優先級,這是在Cococs2d-X -128。

CCLayer.h

/** priority of the touch events. Default is 0 */ 
virtual void setTouchPriority(int priority);  

CCMenu.h

enum { 
    //* priority used by the menu for the event handler 
    kCCMenuHandlerPriority = -128, 
};