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

问题描述:

我试图暂时禁用整个屏幕上的触摸,尽管它们在屏幕上有很多与touchesBegun的精灵。关闭整个屏幕的触摸,SpriteKit,怎么样?

我认为,很明显错误,关闭触摸的场景会做到这一点:

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 
    }) 

这将查找具有与可触摸开头的名称的任何节点。

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

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) 

这是做什么是巴掌在一个几乎透明的节点上的所有元素场景的大小。通过这种方式,当用户触摸屏幕时,该节点将吸收它而不是其他任何东西。

+0

哎哟。和俞。再感谢你!我决定把我想要关闭的物体放入一个数组中,将它们转换为interactionoff,然后在我再次需要它们时再打开。因为没有一种更好的方式来临时关闭所有输入。 – Confused

+0

不错的诀窍,99999的“图层”可以抓取并吞下! – Confused

+0

我现在使用这个枚举的东西来删除一个特定的节点......从另一个问题的定时器栏...你能解释'(节点,停止)'在做什么? – Confused

下面将禁用所有触摸

self.view?.isUserInteractionEnabled = false