我必须覆盖带有子节点的SKSpriteNode子类中的touchesBegan和touchesEnded(因为我想在子节点上传播触摸事件)
touchesBegan工作正常,但我遇到的问题是触摸检查同一个精灵仍在用户手指下。
无论我尝试什么,我都没有提到“自我”和“自我”。在该点的节点列表中
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touched ended")
for t in touches {
let allNodes = nodes(at: t.location(in: self.scene!))
print(allNodes)
}
}
t.location(in:self.scene!)应该返回我正在寻找的内容吗?我也尝试过self.scene?.view但这也会返回一个空节点列表。
我怎样才能检查touchesEnded touch是否仍在此SKSpriteNode上?或者确实如果他们已经移动他们的手指检查它是否在一个完全不同的节点上?我想我需要将它转换回整个场景坐标,我认为t.location(in:self.scene.view))会做些什么。我的另一个想法是在主场景文件上使用某种委托方法,但touch.location是否相对于被点击的节点?
答案 0 :(得分:1)
您正在检查self
中的节点.. self这里是子类的父节点..您应该检查主场景中的节点,这将显示正确的子节点:
let allNodes = self.scene!.nodes(at: t.location(in: self.scene!))
您还可以使用各种convert
和convertPoint
方法执行此操作。