2017-07-08 1 views
1

Ich habe dieses Zeichen-Menü in meinem Spiel, das Zeichen anzeigt und wird von Seite zu Seite durch die Berührungen bewegte Funktion verschoben.Berührungen verschoben Funktion beeinflusst das Drücken einer Taste

enter image description here

Ich habe eine Schaltfläche in der skscene (die graue Taste), die auf eine bestimmte Taste ändert sich das Zentrum Charakter ändert sich in Abhängigkeit davon, ob das bestimmte Zeichen entriegelt oder bestimmt nicht, welche Schaltfläche angezeigt wird.

Das Problem, das ich habe, ist, dass, wenn ich versuche und die Taste drücken, um das Zeichen auszuwählen oder drücken Sie, um das Zeichen zu entsperren dauert es mehrere drücken, damit es funktioniert, habe ich die Berührungen für die Tasten in der Berührungs beendet Funktion wie gesehen unten.

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let touch: UITouch = touches.first! 
    let location: CGPoint = touch.location(in: self) 
    let node: SKNode = self.atPoint(location) 
    let duration = 0.25 

    if node == selectButton { 

     setNewPlayerSprite(nameOfPlayer: (centerPlayer?.name)!) 

    } else if node == lockedButton || node == priceLabel { 

     unlockPlayer(nameOfPlayer: (centerPlayer?.name)!) 

    } else if node == otherButton { 

     getSpecialUnlockData() 

    } else if node == purchaseButton || node == purchasePriceLabe { 

     purchaseCharacter(ID: characterProductID) 

    } else if node == buyButton { 

     giveItemAmount(itemName: "Item2", giveAmount: 1) 

    } 

Wenn ich sie in den Berührungen haben begann Methode es ohne Probleme funktioniert gut mit, um es mehrmals zu drücken, um es zu arbeiten. Wenn der Spieler sie jedoch versehentlich leicht berührt, schaltet sie den Charakter frei, was ein Problem darstellt, wenn sie den Charakter nicht freischalten oder ihre Meinung ändern wollten.

Die Touched Moved-Funktion, die das Menü von einer Seite zur anderen bewegt, hat Auswirkungen auf meine Fähigkeit, Tasten zu drücken. Daher muss ich die Taste mehrmals drücken, um sie zu aktivieren.

Gibt es eine Möglichkeit, die Bewegung der Berührungen zu stoppen, wenn eine der Tasten gedrückt wird? (oder gedrückt und gehalten) hier ist meine volle Berührungen Funktionscode.

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 

    //let duration = 0.01 
    let touch: UITouch = touches.first! 
    let newPosition = touch.location(in: self) 
    let oldPosition = touch.previousLocation(in: self) 
    let xTranslation = newPosition.x - oldPosition.x 

    if centerPlayer!.frame.midX > size.width/2 { 
     if (leftPlayer != nil) { 
      let actualTranslation = leftPlayer!.frame.midX + xTranslation > leftGuide ? xTranslation : leftGuide - leftPlayer!.frame.midX 
      movePlayerByX(player: leftPlayer!, x: actualTranslation) 
     } 
    } else { 
     if (rightPlayer != nil) { 
      let actualTranslation = rightPlayer!.frame.midX + xTranslation < rightGuide ? xTranslation : rightGuide - rightPlayer!.frame.midX 
      movePlayerByX(player: rightPlayer!, x: actualTranslation) 
     } 
    } 

    movePlayerByX(player: centerPlayer!, x: xTranslation) 
    priceLabel.isHidden = true; selectButton.isHidden = true; lockedButton.isHidden = true; otherButton.isHidden = true 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let touch: UITouch = touches.first! 
    let location: CGPoint = touch.location(in: self) 
    let node: SKNode = self.atPoint(location) 
    let duration = 0.25 

    if node == selectButton { 

     setNewPlayerSprite(nameOfPlayer: (centerPlayer?.name)!) 

    } else if node == lockedButton || node == priceLabel { 

     unlockPlayer(nameOfPlayer: (centerPlayer?.name)!) 

    } else if node == otherButton { 

     getSpecialUnlockData() 

    } else if node == purchaseButton || node == purchasePriceLabe { 

     purchaseCharacter(ID: characterProductID) 

    } else if node == buyButton { 

     giveItemAmount(itemName: "Item2", giveAmount: 1) 

    } 

Antwort

1

Ich würde überprüfen, um zu sehen, ob die Note in einer bestimmten Ansicht ist oder nicht mit einer if-Anweisung.

Etwas wie folgt aus:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 

//let duration = 0.01 
let touch: UITouch = touches.first! 
if touch.view == self.view{ 
    let newPosition = touch.location(in: self) 
    let oldPosition = touch.previousLocation(in: self) 
    let xTranslation = newPosition.x - oldPosition.x 

    if centerPlayer!.frame.midX > size.width/2 { 
     if (leftPlayer != nil) { 
      let actualTranslation = leftPlayer!.frame.midX + xTranslation > leftGuide ? xTranslation : leftGuide - leftPlayer!.frame.midX 
      movePlayerByX(player: leftPlayer!, x: actualTranslation) 
     } 
    } else { 
     if (rightPlayer != nil) { 
      let actualTranslation = rightPlayer!.frame.midX + xTranslation < rightGuide ? xTranslation : rightGuide - rightPlayer!.frame.midX 
      movePlayerByX(player: rightPlayer!, x: actualTranslation) 
     } 
    } 

    movePlayerByX(player: centerPlayer!, x: xTranslation) 
    priceLabel.isHidden = true; selectButton.isHidden = true; 
    lockedButton.isHidden = true; otherButton.isHidden = true 
} 

} 
+0

diese Art von Arbeiten ... es funktioniert mit nicht das Zentrum Charakter ändern zu können, aber ich weiß nicht, wie zu erkennen, ob es die bestimmte Tasten berührt beim Drücken Sie. Kann ich dieselbe if-Anweisung für meine Schaltflächen verwenden? weil sie spritenodes sind – Astrum

+0

Ja, ich glaube schon, dieser Beitrag hat eine ähnliche Antwort https://stackoverflow.com/questions/27922198/how-do-i-detect-if-an-skspritenode-has-been-berührte – Ali

+0

danke das hat alles funktioniert – Astrum