【问题标题】:Cocos2d: One layer on top of another - Is it Possible to temporarily deactivate touches for a certain layer/region?Cocos2d:一层在另一层之上 - 是否可以暂时停用某个层/区域的触摸?
【发布时间】:2010-11-23 16:58:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: iphone cocos2d-iphone layer touches


    【解决方案1】:

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

    但是,只要滑动触摸区域是 UIView 子类,这是一个可行的组合。

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

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

    在您的视图滑入后,您可能需要在该特定视图上设置用户交互启用:YES。当它滑出时,你可以把它全部放回去

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我实际上使用“rects”并检查某个点是否在该矩形内。如何禁用 CGRect 或 cocos2d 中的一般对象?关于您的第二次提及:那么我应该为我的幻灯片形状创建一个额外的图层,其中只有幻灯片在屏幕上可以按下的按钮?如果我有一个图层在另一个图层之上,它会捕捉到我的触摸输入,从而使下面的图层无法获取触摸信息吗?
      猜你喜欢
      • 2023-01-09
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多