ios - cocos2d 3.0如何优先处理触摸吞咽

标签 ios iphone cocoa-touch cocos2d-iphone

由于CCTargetedTouchDelegate 从cocos2d 3.0 开始被移除了,我想知道如何处理touch swallowing 东西?

我在 Canvas 节点(2.x 中的层)顶部有一个小 Sprite ,需要将 Sprite 的优先级设置为高于 Canvas 。当用户在 sprite 边界框内触摸时,触摸被吞没,否则 Canvas 将响应它。

最佳答案

在 cocos2d 3.0 中,触摸是按反向 z 顺序处理的。这意味着如果您的 Sprite 在 Canvas 节点之上呈现,它应该已经首先接收到触摸通知,并且有机会吞下它。

但是,要接收和吞下 Sprite 的触摸,您应该遵循以下步骤:

  1. 为你的 Sprite 创建一个单独的类并从 CCSprite
  2. init方法中设置self.userInteractionEnabledYES 如果这个类(class)。
  3. 添加 touchBegan: 方法。

这会吞掉触摸,因为如果不在touchBegan: 方法中调用[super touchBegan:...],就不会将它传递给底层节点.

CCSprite(一直到CCNode)的默认实现调用[super touchBegan:...],这这就是为什么您需要创建一个子类并覆盖此行为的原因。

如果你确实需要在某些情况下将触摸传递给底层节点,你可以这样写:

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    if (_passToUnderlyingNode == YES)
    {
        //passed to canvas node
        [super touchBegan:touch withEvent:event];     
    }
    else
    {
        //swallowed
    }
}

关于ios - cocos2d 3.0如何优先处理触摸吞咽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229958/

相关文章:

ios - iOS 中的世界地图

ios - 自定义展开转场动画显示问题

iphone - 如何更改分组的 tableViewCell 的高度?

iphone - 是否可以通过编程将 iPhone 静音?

objective-c - 如何在 Objective C 中获取这些对象数组中的对象的属性?

iphone - 为什么在访问对象属性时应该使用 KVC 而不是简单的点语法?

iphone - 发送文本然后调用联系人 iPhone 应用程序

ios - 如何在IOS中翻转贺卡

iphone - 将视频复制到 uipasteboard

iphone - 所有触地事件上的按钮声音