Cocos2d:一层在另一层之上 - 是否可以暂时停用某个层/区域的触摸?

时间:2010-11-23 16:58:00

标签: iphone cocos2d-iphone layer touches

我有一个有按钮的场景。单击按钮后,一个矩形精灵从左侧滑入:http://img255.imageshack.us/img255/9867/slidei.png

在这种形状下,有几个触敏按钮。当我触摸矩形时,我不希望这些被调用。因此,只要形状保留在屏幕上,那些触摸就不应该响应。相反,棕色形状顶部还有其他几个按钮,可以响应触摸。我该如何管理?

是否可以暂时停用场景中某个图层的触摸?矩形形状本身是CCLayer对象吗?

我知道我可以为具有透明背景的形状创建一个新场景,但我仍然希望按钮能够对触摸作出反应:

当我点击该按钮时,形状会滑入。当我再次点击它时,它会滑出屏幕。

2 个答案:

答案 0 :(得分:2)

取决于您是否使用touchesBegan方法响应的实际按钮对象或CGRect区域。我同意GamingHorror的说法,最干净的方法是根据需要直接启用/禁用按钮对象。

然而,只要滑动触摸区域是UIView子类,这是一个可行的kludge。

在滑入之前,您可以通过以下方式禁用所有用户触摸:

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled:NO];

在视图滑入后,您可能需要在该特定视图上设置UserInteractionEnabled:YES。当它滑出时,你可以用

将它全部放回去

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled:YES];

答案 1 :(得分:0)

与任何用户界面一样,您必须让对象知道它们是否已启用。实际上,您最好的选择是向按钮发送消息,告诉它打开或关闭。

理想情况下,您将使用全局触摸输入处理程序,而不是允许每个单独的按钮或幻灯片自行响应输入。这会带来很多麻烦和额外的工作。相反,将应该对输入作出反应的所有对象放在同一层上,并使用触摸输入处理程序注册该层,然后触摸输入处理程序将所有触摸事件转发到该特定层而不是其他层。

相关问题