我有两个CCMenu实例。在游戏中的某个时刻,菜单A与菜单B重叠。但是,当我按下菜单B中的按钮时,“获取它”的是菜单A.
如何为CCMenu B提供触控优先?
我试过了:
[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];
然而,Xcode表示未找到此委托(menuB)。
答案 0 :(得分:2)
好的,我解决了这个问题,但我仍然认为应该有更好的方法。
首先,我们必须编辑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
值。
答案 1 :(得分:0)
我遇到了同样的问题。我所做的是从cocos2d库复制整个CCMenu,重命名它,然后将kCCMenuTouchPriority
修改为我想要的。请注意,您必须为自定义菜单重命名kCCMenuTouchPriority
。我使用了kkCCMenuTouchPriority
。
我在这样的代码中调用它:
CCMenuPopUp *menu =[CCMenuPopUp menuWithItems:item1,nil];
我尝试将其子类化,但我遇到了一些问题并放弃了上面的解决方案。
CCTouchDispatcher的功能不起作用,因为当你调用菜单时它还没有被输入
答案 2 :(得分:0)
以上是上述答案之一的另一个变体,它不会改变cocos2D代码库,因为这是不好的做法:https://gist.github.com/tudormunteanu/6174624