1

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

如何将触摸优先权赋予 CCMenu B?

我试过这个:

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

然而,Xcode 说没有找到这个委托(menuB)。

4

3 回答 3

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在初始化后赋予它更高的值即可。

于 2012-07-21T00:43:14.123 回答
0

我有同样的问题。我所做的是从 cocos2d 库中复制整个 CCMenu,将其重命名,然后修改kCCMenuTouchPriority为我想要的。请注意,您必须kCCMenuTouchPriority为自定义菜单重命名。我用过kkCCMenuTouchPriority

我用这样的代码调用它:

CCMenuPopUp *menu =[CCMenuPopUp menuWithItems:item1,nil];

我试图对它进行子类化,但遇到了一些问题并放弃并采用了上面的解决方案。

CCTouchDispatcher 的东西不起作用,因为当你调用它时菜单还没有初始化

于 2012-07-21T00:03:56.587 回答
0

这是上述答案之一的另一个变体,它不会改变 cocos2D 代码库,因为这是不好的做法:https ://gist.github.com/tudormunteanu/6174624

于 2013-08-07T14:38:24.880 回答