我有兩個CCMenu實例。在遊戲的某個時候,菜單A與菜單B重疊。但是,當我按下菜單B中的某個按鈕時,「獲取它」的菜單是菜單A.如何優先觸摸我的CCMenu?
如何將觸摸優先級設置爲CCMenu B ?
我嘗試這樣做:
[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];
然而,Xcode中說,這代表(menuB)沒有被發現。
我有兩個CCMenu實例。在遊戲的某個時候,菜單A與菜單B重疊。但是,當我按下菜單B中的某個按鈕時,「獲取它」的菜單是菜單A.如何優先觸摸我的CCMenu?
如何將觸摸優先級設置爲CCMenu B ?
我嘗試這樣做:
[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];
然而,Xcode中說,這代表(menuB)沒有被發現。
好菜單還沒有inited,我解決了這個問題,但我仍然認爲應該有一個更好的辦法。
首先,我們要編輯CCMenu的界面。我們必須創建一個新的整數屬性。
@interface CCMenu : CCLayer <CCRGBAProtocol>
{
tCCMenuState state_;
CCMenuItem *selectedItem_;
GLubyte opacity_;
ccColor3B color_;
int extraTouchPriority; // Our new integer
}
@property (readwrite) int extraTouchPriority;
現在改變registerWithTouchDispatcher
方法是:
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuTouchPriority - extraTouchPriority swallowsTouches:YES];
}
完成。現在,當您必須爲您的CCMenu實例提供比其他優先級更高的優先級時,只需在初始化之後爲其提供更高的extraTouchPriority
值。
我有同樣的問題。我所做的是從cocos2d庫複製整個CCMenu,重命名它,然後將kCCMenuTouchPriority
修改爲我想要的。請注意,您必須重命名kCCMenuTouchPriority
才能使用自定義菜單。我用kkCCMenuTouchPriority
。
我把它叫做在這樣的代碼:
CCMenuPopUp *menu =[CCMenuPopUp menuWithItems:item1,nil];
我試圖繼承它,但我遇到了一些問題,放棄了與上述解決方案了。
的CCTouchDispatcher東西不起作用,因爲當你把它
以上是其中一個anwers上的anoter變體,它不會更改cocos2D代碼庫,因爲這是不好的做法:https://gist.github.com/tudormunteanu/6174624