2017-08-02 126 views
1

我有精靈在屏幕上移動,如果點擊它們就會消失(即刪除)。如何檢查是否有子節點被觸摸Swift 3

我已經覆蓋了的touchesBegan FUNC如下:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    print("touch") 
    let touch = touches.first! 
    let location = touch.location(in: self) 
    for child in self.children { 

     if child.position == location { 
      child.removeFromParent() 
     } 
    } 
} 

這似乎並沒有產生任何影響,可有人告訴我,我錯了?

+0

我建議一個新的稱號? – Shades

+1

好的。現在改變它。 –

+0

您是否設置了觸摸互動以在視圖中啓用它們或在這些圖片上添加觸摸手勢? – Lunarchaos42

回答

2

你在哪個類中實現了這個方法?

如果是在SKNode本身,你只需要做:

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

    self.removeFromParent() 

} 

但是,如果此方法是在SKScene,這種方式被實施將可能無法正常工作。因爲child.position返回觸摸點的位置(x,y)。而且你試圖比較SKNode(中心點)的觸點和位置,它不太可能工作。

而不是使用這種方式,請嘗試使用.nodeAtPoint,一種SKScene的方法。

爲此,您需要把一個價值在SKNode的「名」屬性:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    print("touch") 
    let touch = touches.first! 
    let positionInScene = touch.locationInNode(self) 
    let touchedNode = self.nodeAtPoint(positionInScene) 

    if let name = touchedNode.name 
    { 
     if name == "your-node-name" 
     { 
      touchedNode.removeFromParent() 
     } 
    } 

} 

字體:How do I detect if an SKSpriteNode has been touched

+0

將第一個示例添加到Sprite類中,完美地工作。謝謝! –

相關問題