1

I am making a game with SpriteKit.

I am trying to add a SKLabelNode (pointsLabel), and I have got it to work if I don't set label.isHidden = true. However, I want the Label to be hidden until touchesBegan, but it seems like I can't recall the LabelNode in this function, so the label remains hidden.

How do I get it to work?

This is the code:

class GameScene: SKScene {

private var pointsLabel: SKLabelNode?

override func didMove(to view: SKView) {
    pointsLabelShow()
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Get label node from scene and store it for use later
    self.label = self.childNode(withName: "//pointsLabel") as? SKLabelNode
    if let label = self.label {
        label.isHidden = false
        let fade = SKAction.fadeIn(withDuration: 0.2)
        let sequence = SKAction.sequence([fade])
        label.run(sequence)

    }    
}

override func update(_ currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

    self.label = self.childNode(withName: "//pointsLabel") as? SKLabelNode
    if let label = self.label {
        label.position.y = ballHeight + 840
    }

    func pointsLabelShow() {
        let pointsLabel = SKLabelNode(fontNamed: "orkneymedium")
        pointsLabel.isHidden = true
        pointsLabel.text = "000"
        pointsLabel.fontSize = 50
        pointsLabel.fontColor = SKColor.white
        self.addChild(pointsLabel)
    }
}

}

Let's_Create
  • 2,963
  • 3
  • 14
  • 33

1 Answers1

0

Try to put a name to the SKLabelNode, suppose “pointsLabel"

func pointsLabelShow() {
        let pointsLabel = SKLabelNode(fontNamed: "orkneymedium")
        pointsLabel.isHidden = true
        pointsLabel.text = "000"
        pointsLabel.fontSize = 50
        pointsLabel.name = "pointsLabel"
        pointsLabel.fontColor = SKColor.white
        self.addChild(pointsLabel)

    }

If you want the node only when touched, in your TouchsBegan method, do this:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first!
    let positionInScene = touch.location(in: self)
    let touchedNode = self.atPoint(positionInScene)

    if let name = touchedNode.name
    {
        if name == "pointsLabel"
        {
            touchedNode.isHidden = false
            let fade = SKAction.fadeIn(withDuration: 0.2)
            let sequence = SKAction.sequence([fade])
            touchedNode.run(sequence)
        }
    }
}

if you want the node to come in a touch anywhere, try to put the node in a local variable

Hope this helps

Sore
  • 176
  • 4