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

标签 swift sprite-kit sknode

<分区>

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

我有一个按钮:

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

    addChild(attackButton)

 }

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

要从此按钮运行函数,我使用 touchesBegan() 函数:

 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 方法的行为都是一样的。意思是,如果给定点位于父级(在您的情况下为按钮)坐标系内,它将始终返回 true

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

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

关于Swift + SpriteKit - 即使按钮不可见也可以点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536703/

相关文章:

swift - ARKit限制节点的显示距离

ios - 我如何在第 2 代 SKSpriteNode 之间等待?

ios - SK节点!不可转换为 "SKNode"

arrays - swift 中的 "Attemped to add a SKNode which already has a parent"

ios - Spritekit SkNodes 相交的矩形/多边形

ios - 如何防止异步响应之前占位符内容闪烁

swift - 在 Swift 中制作 NSWindowController Singleton 的正确方法是什么?

ios - Swift - 无法从文件读取/写入

swift - 如何在 SKScene 中呈现 View Controller ?

ios - 分数增加无限