2017-02-28 2 views
1

Ich konnte feststellen, ob der Benutzer die linke oder rechte Seite des Bildschirms berührt und dann eine Funktion ausführt. Ich versuche zu erkennen, ob beide Seiten des Bildschirms gleichzeitig berührt werden und wenn ja, führe eine andere Funktion aus.Swift erkennt Berührung auf der linken und rechten Seite des Bildschirms gleichzeitig

Dies ist, was ich nicht funktioniert, wenn beide Seiten des Bildschirms zur gleichen Zeit berührt werden.

Dies ist in der Update-Funktion.

if (touched) { 
     var isRight : Bool = false 
     var isLeft : Bool = false 

     if(location.x < 0){ 
     isLeft = true 
     moveLeft() 
     } 
     else if(location.x > 0){ 
     isRight = true 
     moveRight() 


      } 
     else if (isRight && isLeft){ 
      moveUp() 


     } 

    } 
+0

Für mich? Das ist eine extrem verwirrende Touch-Aktion. (Ich schätze, für einen Nicht-Entwickler ist es schlimmer.) Können Sie erklären, wofür Sie das herausfinden möchten? Persönlich würde ich eine andere Geste wählen. Aber wie auch immer, vielleicht können Sie mit einer Pinch-Geste erkennen, wo jede Ziffer auf der Hand eines Benutzers ist? (Ja, ich denke, das ist eine ziemlich schlechte Design-Geste.) – dfd

+0

Im Grunde berührt die linke Seite des Bildschirms MovesLeft ... berührt die rechte Seite des Bildschirms MovesRight. Berührt sowohl links als auch rechts und feuert dann das Objekt. –

+1

Also das ist ein Spiel Touch? Meine zwei Vorschläge: (1) Wie ich schon sagte, probiere eine Prise Geste (oder gehe tiefer mit BerührungenBegan und berührtEnded - und entdecke zwei Berührungen). (2) Legen Sie eine Art "Schicht" auf jede Seite. @Yitschak hat eine Antwort, die helfen kann. – dfd

Antwort

0

Ich habe keine Zeit, den Code (ich bin am Telefon jetzt - es hilft, wenn Sie die ganze Funktion post) zu schreiben. Grundsätzlich sollten Sie als Parameter eine Reihe von Berührungen erhalten. Sie durchlaufen sie dann und schalten die Flags ein: rechte/linke Seite berührt. Und dann rufen Sie Ihre Funktionen basierend auf den Flags

+0

Die Funktion sendet einfach einen Sprite-Knoten vom Player an den oberen Bildschirmrand. So wie eine Kugel nach oben schießen. Ich kann mir sowieso nicht vorstellen, auf einen Timer zu schießen. Ich dachte, dass das Berühren beider Seiten eine gute Möglichkeit wäre, das zu tun. –

0

Verwendung dieser Funktion eine Reihe von Berührungspositionen bekommen Ameise zu prüfen, ob ihre Position sind (links und rechts)

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if touches.count == 2 { 
     // 2 touches so we got 2 positions 
     let tch_1 = touches[touches.startIndex].location(in: self.view) 
     let tch_2 = touches[touches.endIndex].location(in: self.view) 
     if (tch_1.x < self.view.frame.size.width/2 && tch_2.x >= self.view.frame.size.width/2) || (tch_2.x < self.view.frame.size.width/2 && tch_1.x >= self.view.frame.size.width/2) { 
      //touch detected in both left and right side of screen simultaneously 

     } 
    } 
} 
0

Folgende Prüfungen alle Berührungen berührt Seite und baut eine Union Wert auf als integer-Wert, der dann mit einer switch-Anweisung überprüft werden kann:

struct Sides : OptionSet { 
    let rawValue: Int 

    static let left = Sides(rawValue:1) 
    static let right = Sides(rawValue:2) 

    static let both : Sides = [.left, .right] 
    static let none : Sides = [] 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    // Get sides touched 
    let touched = touches.map { return $0.location(in: view) }.reduce(Sides.none) { 
     if $1.x < 0 { 
      return [ $0, Sides.left ] 
     } 
     else if $1.x > 0 { 
      return [ $0, Sides.right ] 
     } 
     else { 
      return $0 
     } 
    } 

    switch(touched) { 
    case Sides.left: 
     // handle left 
     break 

    case Sides.right: 
     // handle right 
     break 

    case Sides.both: 
     // handle both 
     break 

    case Sides.none: 
     fallthrough 

    default: 
     // none 
     break 

    } 
} 
+1

Ich denke 'Sides' könnte besser als' OptionSet' implementiert werden. https://developer.apple.com/reference/swift/optionset – BallpointBen

+0

Dies gibt nur "Richtig" zurück? –

+0

Wahrlich genug @BallpointBen, ich konnte zu der Zeit nicht mit 'OptionSet' kommen :) –

Verwandte Themen