2017-08-02 77 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类中,完美地工作。谢谢! –

相关问题