swift sprite-kit touch skscene disabled-input

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