1

SKLabelNodeXcode 6 を実行して、SpriteKit と Swift を使用してゲームを作成していmyLabelNodeます。呼び出すmyLabelNode.removeFromParent()と、必要に応じてノードがシーンから削除されます。ノード数が 1 減り、画面のどこにも表示されなくなります。ただし、以前の場所をクリックすると、私のプログラムは、タッチmyLabelNodeされたときにのみ発生するはずの関数を呼び出します。myLabelNodeとの組み合わせも試してみましたmyLabelNode.removeFromParent()myLabelNode.hidden = true、それでもタッチ可能であり、そうすべきではないにもかかわらず関数を呼び出します。これを修正するにはどうすればよいですか? 私が使用すべき別の方法はありますか?これは起こるはずですか?

編集:

    let lemonadeLabel = SKLabelNode(fontNamed: "Optima-ExtraBlack")

    override func didMoveToView(view: SKView) {

    lemonadeLabel.text = "Lemonade Stand"
    lemonadeLabel.fontSize = 24
    lemonadeLabel.fontColor = SKColor.yellowColor()
    lemonadeLabel.position = CGPoint(x: size.width/2, y: size.height*0.66)
    lemonadeLabel.zPosition = 2.0
    addChild(lemonadeLabel)

    }


    override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {

    let touch = touches.anyObject() as UITouch
    let location = touch.locationInNode(self)

        if lemonadeLabel.containsPoint(location) {

            println("lemonadeLabel pressed")
            lemonadeLabel.removeFromParent()
            /*lemonadeLabel is now be removed,
            however if I click the area where it 
            used to be, "lemonadeLabel pressed"
            will print to the console*/

        }

    }
4

2 に答える 2

1

あなたはもうlabelNode中にいないかもしれませSKSceneん。これは、関数に応答しないという意味ではありませんcontainsPoint。静止画には位置が割り当てられており、関数labelNodeを使用してポイントがその内部にあるかどうかを計算できcontainsPointます。

代わりに、これを試すことができます。

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {

    let touch = touches.anyObject() as UITouch
    let location = touch.locationInNode(self)

    if self.nodeAtPoint(location) === lemonadeLabel {

        println("lemonadeLabel pressed")
        lemonadeLabel.removeFromParent()

    }

}
于 2015-01-30T02:25:30.120 に答える