有把沒有全球性的方法觸摸,無論在繪圖隊列的頂部是第一響應者。
你需要從場景中通過所有節點的迭代和關閉它們:
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)
這是做什麼是巴掌在一個幾乎透明的節點上的所有元素場景的大小。通過這種方式,當用戶觸摸屏幕時,該節點將吸收它而不是其他任何東西。
哎喲。和俞。再感謝你!我決定把我想要關閉的物體放入一個數組中,將它們轉換爲interactionoff,然後在我再次需要它們時再打開。因爲沒有一種更好的方式來臨時關閉所有輸入。 – Confused
不錯的訣竅,99999的「圖層」可以抓取併吞下! – Confused
我現在使用這個枚舉的東西來刪除一個特定的節點......從另一個問題的定時器欄...你能解釋'(節點,停止)'在做什麼? – Confused