我有两个 CCMenu 实例。在游戏中的某个时刻,菜单 A 与菜单 B 重叠。但是,当我按下菜单 B 中的一个按钮时,“得到它”的是菜单 A。
如何将触摸优先权赋予 CCMenu B?
我试过这个:
[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];
然而,Xcode 说没有找到这个委托(menuB)。
我有两个 CCMenu 实例。在游戏中的某个时刻,菜单 A 与菜单 B 重叠。但是,当我按下菜单 B 中的一个按钮时,“得到它”的是菜单 A。
如何将触摸优先权赋予 CCMenu B?
我试过这个:
[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];
然而,Xcode 说没有找到这个委托(menuB)。
好的,我解决了这个问题,但我仍然认为应该有更好的方法。
首先,我们要编辑 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 的东西不起作用,因为当你调用它时菜单还没有初始化
这是上述答案之一的另一个变体,它不会改变 cocos2D 代码库,因为这是不好的做法:https ://gist.github.com/tudormunteanu/6174624