Skip to main content
 首页 » 操作系统

ios之SKLabelNode 将消失但仍可点击

2024年01月01日45lhb25

我正在使用 SpriteKit 和 Swift 制作一个游戏,运行 Xcode 6。我有一个 SKLabelNode,在这个例子中我们称它为 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*/ 
 
        } 
 
    } 

请您参考如下方法:

您正在尝试确定约束点的位置是否被触及。即使您从场景中删除标签,它仍然是内存中的一个对象,即:您可以稍后重新添加它。它仍然具有所有属性,包括位置等。

我会试试这个:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
 
    for touch: AnyObject in touches { 
        if nodeAtPoint(touch.locationInNode(self)) == lemonadeLabel { 
            println("lemonadeLabel pressed") 
            lemonadeLabel.removeFromParent() 
        } 
    } 
} 

您基本上确定 lemonadeLabel 是否是该位置的节点,如果是,您将其删除。因为你是跟场景中添加的节点进行比较,如果没有了,就不会再进行比较了;)