swift - Desactiva el toque para pantalla completa, SpriteKit, ¿cómo?
sprite-kit touch (2)
Intento deshabilitar temporalmente el toque en toda la pantalla, a pesar de que hay muchos objetos con toques activados en pantalla.
Pensé, obviamente erróneamente, que apagar el contacto para la escena lo haría:
scene?.isUserInteractionEnabled = false
Pero eso no funcionó, así que probé esto, que tampoco funcionó:
view?.scene?.isUserInteractionEnabled = false
Eso tampoco funcionó, así que probé esto, también desde dentro de la escena:
self.isUserInteractionEnabled = false
No hay un método global para desactivar el toque, lo que está en la parte superior de la cola de dibujo es el primer respondedor.
Necesitas iterar a través de todos tus nodos desde tu escena y desactivarlos:
enumerateChildNodesWithName("//*", usingBlock:
{ (node, stop) -> Void in
node.isUserInteractionEnabled = false
})
Ahora que el problema es volver a encenderlos, si usa este método, lo activará para todo, por lo que es posible que desee adoptar una convención de nomenclatura para todos sus sprites tocables.
enumerateChildNodesWithName("//touchable", usingBlock:
{ (node, stop) -> Void in
node.isUserInteractionEnabled = true
})
Esto buscará cualquier nodo que tenga un nombre que comience con un toque.
Este método implica la recursión, por lo que si tiene una tonelada de nodos, puede ser lento. En su lugar, debe usar un método alternativo:
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)
Lo que hace es dar un golpe en un nodo casi transparente sobre todos los elementos del tamaño de la escena. De esta forma, cuando un usuario toca la pantalla, este nodo la absorberá en lugar de cualquier otra cosa.
Lo siguiente deshabilitará todos los toques
self.view?.isUserInteractionEnabled = false