1
votes

I am making a SpriteKit game that has a button node that is at the highest zPosition. I am overriding the touchesBegan function to add functionality to the button. It works because that button is at the highest position in the z dimension. The .zPosition is set to the highest amount compared to any other nodes. I need to have another button in the scene but it needs to have a lower .zPosition because it needs to be covered by another node at one point. When I have a .zPosition that is lower than another node, the touchesBegan method does not trigger. It works if I have a higher .zPosition but that makes the other button node not work. How can I make the touchesBegan method work regardless of what the .zPosition is? Please ask me for more clarification. Thanks!

2

2 Answers

0
votes

Once you get the point in touchesBegan did you try to test if the button node contains the point :

func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) -> Bool {
    if touches.count == 1 {
        if let touch = touches.first {
            let location = touch.location(in: self)
            if myButtonNode.contains(location) {
...
0
votes

You want to use the nodes(at:) method. This is an array of all nodes at a particular point, the point being where you touch.

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

for t in touches {
  let location = t.location(in: self)
  let touchedNodes = self.nodes(at: location) // Array of all nodes at the point
  
  for node in touchedNodes { // Iterate through all nodes in the touchedNode array
    if node.name == "your button node" {
    ... // Add your button code here
    }
  }
}
    
}