如何优先处理CCMenu的触摸?

时间:2012-07-20 23:57:29

标签: cocos2d-iphone

我有两个CCMenu实例。在游戏中的某个时刻,菜单A与菜单B重叠。但是,当我按下菜单B中的按钮时,“获取它”的是菜单A.

如何为CCMenu B提供触控优先?

我试过了:

[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];

然而,Xcode表示未找到此委托(menuB)。

3 个答案:

答案 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