swift - Deaktivieren Sie Touch für den ganzen Bildschirm, SpriteKit, wie?




sprite-kit skscene (2)

Ich versuche, Touch auf dem gesamten Bildschirm vorübergehend zu deaktivieren, obwohl sie viele Sprites mit Berührungen auf dem Bildschirm sind.

Ich dachte, offensichtlich falsch, die Berührung für die Szene auszuschalten würde es tun:

    scene?.isUserInteractionEnabled = false

Aber das hat nicht funktioniert, also habe ich das versucht, was auch nicht funktioniert hat:

    view?.scene?.isUserInteractionEnabled = false

Das hat auch nicht funktioniert, also habe ich das auch aus der Szene probiert:

    self.isUserInteractionEnabled = false

Es gibt keine globale Methode zum Deaktivieren der Berührung. Ganz oben in der Zeichnungswarteschlange befindet sich der Ersthelfer.

Sie müssen alle Ihre Knoten von Ihrer Szene durchlaufen und sie ausschalten:

enumerateChildNodesWithName("//*", usingBlock: 
    { (node, stop) -> Void in  
       node.isUserInteractionEnabled = false
    })

Jetzt schaltet das Problem sie wieder ein, wenn du diese Methode verwendest, wirst du sie für alles aktivieren, also solltest du vielleicht eine Namenskonvention für all deine berührbaren Sprites übernehmen

enumerateChildNodesWithName("//touchable", usingBlock: 
    { (node, stop) -> Void in  
       node.isUserInteractionEnabled = true
    })

Dies wird nach jedem Knoten suchen, der einen Namen hat, der mit touchable beginnt.

Diese Methode beinhaltet Rekursion. Wenn Sie also eine Tonne Knoten haben, kann es langsam sein. Stattdessen sollten Sie eine alternative Methode verwenden:

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)

Was dies tut, ist auf einen fast transparenten Knoten über alle Elemente der Größe der Szene zu schlagen. Auf diese Weise wird dieser Knoten, wenn ein Benutzer den Bildschirm berührt, diesen statt alles andere absorbieren.


Im Folgenden werden alle Berührungen deaktiviert

self.view?.isUserInteractionEnabled = false