Ios Cocos2d:在多点触控环境中处理从CCMenu(或类似)项外部开始的触控

Ios Cocos2d:在多点触控环境中处理从CCMenu(或类似)项外部开始的触控,ios,cocos2d-iphone,multi-touch,Ios,Cocos2d Iphone,Multi Touch,我已在AppDelegate中启用多点触摸。在我的游戏场景InputLayer中,我添加了一个CCMenu,其中一些CCMenuItemSprite用作按钮,一个偷偷的Jostic用作控制器。在我的输入层中,我启用了触摸,以这种方式符合“标准触摸代理”协议,因为我希望能够评估CCMenu和SleekyJoystic控制器之外的一些用户触摸 当用户的手指位置到达菜单或joystic实例上方时,当用户开始触摸Sleeky操纵杆或CCMenu类实例区域之外的屏幕时,实例不会检测到触摸,而是保持在场景层

我已在AppDelegate中启用多点触摸。在我的游戏场景InputLayer中,我添加了一个CCMenu,其中一些CCMenuItemSprite用作按钮,一个偷偷的Jostic用作控制器。在我的输入层中,我启用了触摸,以这种方式符合“标准触摸代理”协议,因为我希望能够评估CCMenu和SleekyJoystic控制器之外的一些用户触摸

当用户的手指位置到达菜单或joystic实例上方时,当用户开始触摸Sleeky操纵杆或CCMenu类实例区域之外的屏幕时,实例不会检测到触摸,而是保持在场景层的touchMoved(和/或然后touchEnded)方法的控制下

有没有办法防止这种情况?我的意思是,如何让菜单或joystic实例控制外部启动的触摸?

在阅读时,CCMenu似乎已经符合多点触控协议,因此我应该能够提高其优先级。但我害怕把这件事搞砸。我试图改变层的优先级,但它崩溃了

有什么建议吗


编辑:您可以在我在各种书籍中找到的各种示例项目中看到我所描述的内容。基本上,当有人使用“鬼鬼祟祟”或在层上添加“CCMenu”(在任何项目中)时,如果您从对象外部开始触摸,并移动手指触摸对象,则不会检测到它。如何在不使我的应用程序崩溃的情况下修复此问题?

我不确定您到底想做什么,但如果我不进行编码部分,您可以通过在精灵或菜单图像中添加一些透明的图像部分来扩展菜单的触摸区域。
此外,对于操纵杆,您还可以为控制器使用猜测器

一旦场景开始获得触控事件,它将获得整个触控动作直到触控结束。这里没有“touchEntered”或“touchExited”类型的事件有用,就像在一些基于鼠标的系统中一样


您可以尝试的一件事是让场景处理事件,执行命中测试,然后根据需要将事件转发到操纵杆/菜单上(您可以直接调用TouchsMoved;当手指移入/移出操纵杆/菜单区域时,您可能需要合成TouchStart/touchEnded事件).

谢谢,但我正在寻找使用优先级的解决方案。我已经添加了透明图像,但我觉得这不是一个优雅的解决方案。我认为应该有办法做到这一点。要重新创建问题,只需向空helloworld模板添加ccmen或SkillyJoystic,然后从项目外部开始触摸。您将看到,一旦手指位于实际对象上方,它将无法检测到触摸。我想实现的目的是让项目在手指上方时做出反应。我真的很抱歉,因为我没有理解您的意图,但在二读时我收到了您的问题。您是否尝试按如下方式使用touchDispatcher?(无效)registerWithTouchDispatcher{[[CCTouchDispatcher sharedDispatcher]AddTargetedElegate:self priority:kCCMenuTouchPriority吞咽接触:否];}您以前尝试过解决方案吗?它给我:(“由于未捕获的异常而终止应用程序'nsInternalInconsistencException',原因:'Layer#CCTouchStart覆盖我'我不确定这是否是最严格的解决方案。我也考虑过类似的问题,但不知道如何实施。我认为Cocos2D通过触摸优先级克服了这一问题,所以这就是我的解决方案,但尚未找到。