Overring touchesEnded in SKSpriteNode - 检查场景中是不是有任何节点在点下
Posted
技术标签:
【中文标题】Overring touchesEnded in SKSpriteNode - 检查场景中是不是有任何节点在点下【英文标题】:Overring touchesEnded in SKSpriteNode - check if any node in scene is under pointOverring touchesEnded in SKSpriteNode - 检查场景中是否有任何节点在点下 【发布时间】:2017-01-11 20:32:32 【问题描述】:我不得不在具有子节点的 SKSpriteNode 子类中覆盖 touchesBegan 和 touchesEnded(因为我想在子节点上传播触摸事件)
touchesBegan 工作正常,但我遇到的问题是 touchesEnded 检查同一个精灵是否仍在用户手指下。
无论我尝试什么,我都不会在那时的地点节点列表中获得对“自我”的引用
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 触摸是否仍在此 SKSpriteNode 上?或者如果他们移动了手指,检查它是否在一个完全不同的节点上?我想我需要将它转换回整个场景坐标,我认为 t.location(in: self.scene.view)) 会怎么做。我的另一个想法是在主场景文件上使用某种委托方法,但是 touch.location 是否与被点击的节点相关?
【问题讨论】:
【参考方案1】:您正在检查 self
.. 中的节点。这里的 self 是子类父节点。您应该检查主场景中的节点,这将正确显示子类节点:
let allNodes = self.scene!.nodes(at: t.location(in: self.scene!))
您还可以使用各种convert
和convertPoint
方法来执行此操作。
【讨论】:
我知道 self 是子类节点,但不应该在 self.scene 中定位然后返回场景中的位置?因为场景应该是场景,所以这个节点包含在 allNodes 行中。 哦,我错过了。让我试试看。 抱歉 foo 位令人困惑,因为我试图调试坐标是什么。我已经编辑了问题以使其更明显 修复它:let allNodes = self.scene!.nodes(at: t.location(in: self.scene!))
@TommyBs
@TommyBs 你调用了你的子类方法nodes()
而不是场景的nodes()
.. :P 这正是我所说的,但我仍然错过了那部分哈哈。 XD以上是关于Overring touchesEnded in SKSpriteNode - 检查场景中是不是有任何节点在点下的主要内容,如果未能解决你的问题,请参考以下文章
touchesEnded:withEvent: 来自 UIScrollView 第一响应者
调用 touchescancelled 而不是 touchesended