我有精灵在屏幕上移动,如果点击它们就会消失(即删除)。
我已经覆盖了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 :(得分: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()
}
}
}