Swift + SpriteKit - 即使按钮不可见也可以点击

Swift + SpriteKit - Button is clickable even when not visible

我的场景中的一个节点似乎有问题。

我有一个按钮:

 func createAttackButton() {
    attackButton.zPosition = 1
    attackButton.anchorPoint = CGPointZero
    attackButton.position = CGPointMake(20, 20)
    attackButton.size = CGSize(width: 150, height: 40)

    addChild(attackButton)

 }

与敌人接触时调用此函数。

为了运行这个按钮的一个功能我使用touchesBegan() func:

 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)

        if attackButton.containsPoint(location) {

            print("Attack Button Clicked")

        }
    }
}

一旦敌人被摧毁,我就移除攻击按钮节点:

 attackButton.removeFromParent()

但是,在攻击按钮出现的区域,一旦它被移除,该区域仍然可以点击。

有什么想法吗?

看来无论是否将节点添加到父节点,containsPoint 方法的行为都是一样的。意思是,如果给定点位于父坐标系(在您的情况下为按钮坐标系)内,它将始终 return true

您可以通过初始化 attackButton 而不将其添加到场景中来检查这一点。如果点击场景左下角的 ,来自touchesBegan的消息仍会打印。

我想,这是因为每个节点的 position 属性 默认设置为 CGPoint(0,0)。此外,在您的情况下,按钮有其大小。即使它没有添加到其父项(或者如果从其父项中删除),它也会设置其大小和位置,因为它显然被定义为 属性 并且有对它的强引用。