24GHz
24GHz

Reputation: 80

See if SKShapeNode touched?: How to Identify node?

I am doing a small for fun project in Swift Xcode 6. The function thecircle() is called at a certain rate by a timer in didMoveToView(). My question is how do I detect if any one of the multiple circle nodes on the display is tapped? I currently do not see a way to access a single node in this function.

func thecircle() {
    let circlenode = SKShapeNode(circleOfRadius: 25)
    circlenode.strokeColor = UIColor.whiteColor()
    circlenode.fillColor = UIColor.redColor()

    let initialx = CGFloat(20) 
    let initialy = CGFloat(1015)

    let initialposition = CGPoint(x: initialx, y: initialy)
    circlenode.position = initialposition

    self.addChild(circlenode)

    let action1 = SKAction.moveTo(CGPoint(x: initialx, y: -20), duration: NSTimeInterval(5)) 
    let action2 = SKAction.removeFromParent()
    circlenode.runAction(SKAction.sequence([action1, action2]))
}

Upvotes: 0

Views: 1136

Answers (1)

hamobi
hamobi

Reputation: 8130

There are many problems with this.

  1. You shouldnt be creating any looping timer in your games. A scene comes with an update method that is called at every frame of the game. Most of the time this is where you will be checking for changes in your scene.

  2. You have no way of accessing circlenode from outside of your thecircle method. If you want to access from somewhere else you need to set up circlenode to be a property of your scene.

    For example:

    class GameScene: BaseScene {
        let circlenode = SKShapeNode(circleOfRadius: 25)
    
  3. You need to use the method touchesBegan. It should have come with your spritekit project. You can detect a touch to your node the following way:

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    
       for touch: AnyObject in touches {
    
           // detect touch in the scene
          let location = touch.locationInNode(self)
    
          // check if circlenode has been touched
          if self.circlenode.containsPoint(location) {
                // your code here
          }
       }
    }
    

Upvotes: 1

Related Questions