关闭整个屏幕的触摸,SpriteKit,怎么样?

Turn off touch for whole screen, SpriteKit, how?

我正在尝试暂时禁用整个屏幕上的触摸,尽管屏幕上有许多带有 touchesBegun 的精灵。

我想,显然是错误的,关闭场景的触摸就可以了:

    scene?.isUserInteractionEnabled = false

但这没有用,所以我试了这个,也没有用:

    view?.scene?.isUserInteractionEnabled = false

那也没有用,所以我也从场景内部尝试了这个:

    self.isUserInteractionEnabled = false

没有关闭触摸的全局方法,绘制队列顶部的是第一响应者。

您需要遍历场景中的所有节点并将它们关闭:

enumerateChildNodesWithName("//*", usingBlock: 
    { (node, stop) -> Void in  
       node.isUserInteractionEnabled = false
    })

现在的问题是重新打开它们,如果你使用这种方法,你会为所有的东西打开它,所以你可能想为你所有的可触摸精灵采用一个命名约定

enumerateChildNodesWithName("//touchable", usingBlock: 
    { (node, stop) -> Void in  
       node.isUserInteractionEnabled = true
    })

这将查找名称以 touchable 开头的任何节点。

此方法涉及递归,因此如果您有大量节点,它可能会很慢。相反,您应该使用替代方法:

let disableTouchNode = SKSpriteNode(color:SKColor(red:0.0,green:0.0,blue:0.0,alpha:0.1),size:self.size)
disableTouchNode.isUserinteractionEnabled = true
disableTouchNode.zPosition = 99999
self.addChild(disableTouchNode)

这样做的目的是在场景大小的所有元素之上放置一个几乎透明的节点。这样当用户触摸屏幕时,这个节点将吸收它而不是其他任何东西。

以下将禁用所有触摸

self.view?.isUserInteractionEnabled = false