Sprite kit 覆盖SKSpriteNode中的触控-检查场景中是否有任何节点处于点下方

Sprite kit 覆盖SKSpriteNode中的触控-检查场景中是否有任何节点处于点下方,sprite-kit,skspritenode,Sprite Kit,Skspritenode,我必须在具有子节点的SKSpriteNode子类中重写touchesBegind和toucheSend(因为我想在子节点上传播一个touch事件) ToucheSeStart工作正常,但我遇到的问题是ToucheSeEnd检查同一个精灵是否仍在用户手指下 无论我做了什么尝试,我都不会在节点位置列表中找到对“self”的引用 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

我必须在具有子节点的SKSpriteNode子类中重写touchesBegind和toucheSend(因为我想在子节点上传播一个touch事件)

ToucheSeStart工作正常,但我遇到的问题是ToucheSeEnd检查同一个精灵是否仍在用户手指下

无论我做了什么尝试,我都不会在节点位置列表中找到对“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)
        }
    }
override func touchesend(touch:Set,带有事件:UIEvent?){
打印(“已结束”)
对于t-in-touch{
让allNodes=节点(在:t.location(在:self.scene!))
打印(所有节点)
}
}
t.location(在:self.scene!)是否应该返回我正在寻找的内容?我还尝试了self.scene?.view,但这也会返回一个空节点列表


我怎样才能检查TouchSended touch是否仍在这个SKSpriteNode上?或者,如果他们移动了手指,检查它是否位于完全不同的节点上?我想我需要将它转换回整个场景坐标,我认为t.location(in:self.scene.view))会如何做。我的另一个想法是在主场景文件上使用某种委托方法,但是touch.location是否与被点击的节点相关?

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

让allNodes=self.scene!。节点(在:t.location(在:self.scene!))


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

我知道self是子类节点,但不应该在self.scene中定位,然后返回场景中的位置?因为场景应该是场景,所以这个节点包含在allNodes行中。哦,我错过了。让我试试。抱歉,当我试图调试坐标时,foo位让人困惑。我对问题进行了编辑,使其更为明显。修复了它:
let allNodes=self.scene!。节点(在:t.location(在:self.scene!))
@TommyBs@TommyBs您正在调用子类`method
nodes()
,而不是场景的
nodes()
:P这正是我说的,但我还是错过了那部分哈哈。除息的