覆盖触摸在SKSpriteNode中结束-检查场景中是否有任何节点在点下



我不得不在具有子节点的SKSpriteNode子类中重写touchesBegan和touchesEnded(因为我想在子节点上传播触摸事件)

touchesBegan运行良好,但我遇到的问题是在touchesEnded中检查用户手指下是否仍有相同的精灵。

无论我做什么,我都不会在的节点列表中引用"self">

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(在:self.scene!)是否应该返回我要查找的内容?我也试过自我。场景?。视图,但这也会返回一个空的节点列表。

我该如何检查touchesEnded触摸是否仍在此SKSpriteNode上?或者如果他们确实移动了手指,检查它是否在一个完全不同的节点上?我想我需要把它转换回整个场景的坐标——我认为t.location(在:self.scene.view中)会怎么做。我的另一个想法是在主场景文件上使用某种委托方法,但touch.location会相对于被点击的节点吗?

您正在检查self中的节点。。self这里是子类化的父节点。。您应该检查主场景中的节点,这将正确显示子类节点:

let allNodes = self.scene!.nodes(at: t.location(in: self.scene!))

您也可以使用各种convertconvertPoint方法来执行此操作。

相关内容

最新更新