2016-04-10 87 views
1

我似乎在我的場景中有一個節點出現問題。Swift + SpriteKit - 即使不可見,按鈕也是可點擊的

我有一個按鈕:

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() 

然而,在攻擊按鈕出現的區域,一旦它被移除,該區域仍然是可點擊的。

任何想法?

回答

2

看來,是否將該節點添加到父項,containsPoint方法將表現相同。意思是,如果給定的點位於父項(在你的情況下,按鈕的)座標系內,它將總是返回true

您可以通過初始化attackButton而不將其添加到場景來檢查。如果您點擊場景的左下角,touchesBegan的消息仍將被打印。

我想,這是因爲每個節點默認情況下其position屬性設置爲CGPoint(0,0)的事實。此外,在你的情況下,按鈕的大小。即使它沒有添加到其父項(或從其父項中移除),也會設置它的大小和位置,因爲它顯然被定義爲一個屬性並且對它有很強的參考。

+1

是的,containsPoint是一個簡單的指向矩形比較的指針,不需要父對象來使其工作。 '節點的邊界是否包含所述的點?'基本上是函數的功能。由於位置不是可選的,因此您將始終能夠通過containsPoint,除非它允許寬度和高度爲零,不確定是否允許這樣做。 – Knight0fDragon