2016-04-17 15 views
0

Ich benutze Xcode 7, Swift und SpriteKit und ich versuche, den Benutzer zu ermöglichen, zwei Finger gleichzeitig in meiner App zu verwenden.Mehrere Berührungen gleichzeitig erkennen (Swift)

Grundsätzlich habe ich zwei Hälften auf meinem Bildschirm, und ich möchte separate Touch-Erkennung für jede Seite, und gleichzeitig.

Hier ist meine aktuellen Code unten:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) 
    { 
     guard let touch = touches.first else { 
      return; 
     } 
     let location = touch.locationInNode(self) 
     let touchedNode = self.nodeAtPoint(location) 
     if (touchedNode == touch1){ 
      //code1 
     } 
     else if (touchedNode == touch2){ 
      //code2 
     } 
    } 

touch1 und touch2 sind SkSpriteNodes, die jeweils eine andere Hälfte des Bildschirms einnehmen.
Dieser Code funktioniert gut, solange Sie jeweils nur einen Finger auf dem Bildschirm haben.
Wenn es jedoch zwei gibt (1 für jede Hälfte), wird zuerst eine auf dem Bildschirm platziert, die registriert ist.

Wie mache ich es so, dass beide registriert werden, und daher Code1 und Code2 ausgeführt werden?

Antwort

1

Sie müssen die Eigenschaft multipleTouchEnabled auf true setzen. Aus der Dokumentation zu dieser Immobilie:

Wenn auf YES gesetzt, erhält der Empfänger alle mit einer Sequenz Multi-Touch zugeordnet berührt. Bei NEIN empfängt der Empfänger nur das erste Berührungsereignis in einer Multitouch-Sequenz. Der Standardwert dieser Eigenschaft ist NO.

EDIT:

Basierend auf Ihre Kommentare, können Sie versuchen, diese (was Sprites, die auf Berührungen):

class Button:SKSpriteNode { 

    init(size:CGSize, color:SKColor) { 

     super.init(texture: nil, color: color, size: size) 

     userInteractionEnabled = true 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     if let name = self.name { 
      print("Button with \(name) pressed") 
     } 
    } 

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     if let name = self.name { 
      print("Button with \(name) pressed") 
     } 
    } 

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     if let name = self.name { 
      print("Button with \(name) released") 
     } 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

class GameScene: SKScene, SKPhysicsContactDelegate { 

    override func didMoveToView(view: SKView) { 

     let left = Button(size: CGSize(width: frame.size.width/2.0, height: frame.size.height), color: .blackColor()) 
     left.name = "left" 
     left.position = CGPoint(x: left.size.width/2.0, y: frame.midY) 

     let right = Button(size: CGSize(width: frame.size.width/2.0, height: frame.size.height), color: .whiteColor()) 
     right.name = "right" 
     right.position = CGPoint(x:frame.maxX-right.size.width/2.0, y: frame.midY) 

     addChild(left) 
     addChild(right) 

    } 
} 
+0

Wo und wie kann ich es wahr? Ich habe versucht, den Code 'view.multipleTouchEnabled = true' in meinem' GameViewController' in der Funktion 'viewDidLoad()' einzufügen. Das behebt es jedoch nicht. – MarshallD

+0

@MarshallD Es sollte genau so funktionieren, wie Sie es gerade tun ... Check out the edit. – Whirlwind

Verwandte Themen