如何检查子节点是否被触及Swift 3

时间:2017-08-02 20:31:45

标签: ios swift swift3

我有精灵在屏幕上移动,如果点击它们就会消失(即删除)。

我已经覆盖了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()
        }
    }
}

这似乎没有任何影响,有人能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:2)

您在哪个班级实施此方法?

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

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

    self.removeFromParent()

}

但是,如果此方法是在SKScene中,那么实现的方式可能不起作用。因为child.position返回触摸所在的点(x,y)。而且您正在尝试比较SKNode(中心点)的触摸点和位置,它不太可能起作用。

不要使用这种方式,而是尝试使用.nodeAtPoint,即SKScene的方法。

为此,您需要在&#39; name&#39;中添加一个值。你的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