【问题标题】:SKLabelNode will disappear but is still clickableSKLabelNode 将消失但仍可点击
【发布时间】:2015-01-30 01:54:01
【问题描述】:

我正在使用 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*/

        }

    }

【问题讨论】:

  • 我们能否看到代码更好地提供帮助?
  • @Tokuriku 这里是:)

标签: ios swift ios8 sprite-kit sklabelnode


【解决方案1】:

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

我会试试这个:

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

    for touch: AnyObject in touches {
        if nodeAtPoint(touch.locationInNode(self)) == lemonadeLabel {
            println("lemonadeLabel pressed")
            lemonadeLabel.removeFromParent()
        }
    }
}

您基本上确定柠檬水标签是否是该位置的节点,如果是,则将其删除。由于您与场景中添加的节点进行比较,如果它消失了,它将不会在那里进行比较;)

【讨论】:

    【解决方案2】:

    您的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()
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多