什么代码“if(![super itemForTouch:touch]){return NO;}”在ccTouchBegan下做什么以及如何让它在cocos2d v3中运行?

时间:2014-09-09 12:55:44

标签: cocos2d-iphone touch

我在coco2d v2 ccmenu中找不到对itemForTouch的任何引用,所以有人可以告诉我这段代码的用途吗? if(![super itemForTouch:touch])部分,以及如何使它在coco2d v3中运行?

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
   if (![super itemForTouch:touch])  {
    return NO;  
}

}

感谢

1 个答案:

答案 0 :(得分:1)

您从哪里获取此代码?

CCMenu.m中有一个itemForTouch。我假设通过查看您发布的内容,某人从CCMenu派生了一个类,重写了他们自己的ccTouchBegan,并调用了超级itemForTouch方法。在该方法中,它循环遍历所有附加的菜单项,检查它们是否可见并启用,并查看触摸位置是否落在该菜单项的矩形内。如果没有触及任何菜单项,您发布的代码将返回NO

您不必手动调用此方法,这就是它未在头文件中声明的原因。如果没有看到您发布的代码的大局,我就无法理解为什么有人会从CCMenu继承子类,假设他们甚至有合理的理由开始。另外在cocos2d v3中查看使用CCButton,这是使用基本cocos2d模板创建新项目时给出的示例。

修改

我现在看到你在注释中链接的代码,它是创建一个菜单弹出类。他所做的只是看看父母中的一个是弹出窗口,如果是,则关闭弹出窗口,因为他知道弹出窗口上的按钮被触摸了。要在V3中执行此操作,假设您有一些充当CCMenuPopup的父节点。您甚至可以将其命名为相同的名称,并在您觉得有必要时重新创建这些类。