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)
。此外,在您的情况下,按钮有其大小。即使它没有添加到其父项(或者如果从其父项中删除),它也会设置其大小和位置,因为它显然被定义为 属性 并且有对它的强引用。
我的场景中的一个节点似乎有问题。
我有一个按钮:
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)
。此外,在您的情况下,按钮有其大小。即使它没有添加到其父项(或者如果从其父项中删除),它也会设置其大小和位置,因为它显然被定义为 属性 并且有对它的强引用。