james
james

Reputation: 2663

Get Property of SKSpriteNode in Touches

I am trying to read a property off of a SKSpriteNode in the touchesBegan method but the property does not exist. Where as it does on the created object elsewhere.

 let enemy = enemy(imageName: "enemy.png",force: "12")
 addChild(enemy)
 enemy.name = "enemy"
 print (enemy.force) // 12

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard let touch = touches.first else {
            return
        }
        let touchLocation = touch.location(in: self)
        let touchedNode = self.atPoint(touchLocation) as! SKSpriteNode
        if(touchedNode.name == "enemy"){
            print(enemy.force) //Force property does not exist
        }
    }

Upvotes: 2

Views: 47

Answers (1)

Alessandro Ornano
Alessandro Ornano

Reputation: 35392

Knowing that SKSpriteNode don't have a force property, you should use your class name that inherits SKSpriteNode properties (used to make enemy..)

An example could be this:

class Enemy : SKSpriteNode {
     var force: Int = 0
     ...
}

Then in your game scene do:

...
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else { return }
    let touchLocation = touch.location(in: self)
    let touchedNode = self.atPoint(touchLocation)
    if(touchedNode.name == "enemy" && touchNode is Enemy){
       // Yes, I'm absolutely sure this is an enemy node..
       let enemy = touchedNode as! Enemy
       print(enemy.force)
    }
 }

Upvotes: 1

Related Questions