关闭整个屏幕的触摸,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)
这是做什么是巴掌在一个几乎透明的节点上的所有元素场景的大小。通过这种方式,当用户触摸屏幕时,该节点将吸收它而不是其他任何东西。
答
下面将禁用所有触摸
self.view?.isUserInteractionEnabled = false
哎哟。和俞。再感谢你!我决定把我想要关闭的物体放入一个数组中,将它们转换为interactionoff,然后在我再次需要它们时再打开。因为没有一种更好的方式来临时关闭所有输入。 – Confused
不错的诀窍,99999的“图层”可以抓取并吞下! – Confused
我现在使用这个枚举的东西来删除一个特定的节点......从另一个问题的定时器栏...你能解释'(节点,停止)'在做什么? – Confused