Sprite kit SpriteKit:确定命中测试的绘图顺序

Sprite kit SpriteKit:确定命中测试的绘图顺序,sprite-kit,hittest,skeffectnode,skcropnode,Sprite Kit,Hittest,Skeffectnode,Skcropnode,我正在使用Spritekit,希望有一个直观的命中测试。 换句话说:我得到了一个位置x,y,想找出哪个节点是被击中的最上面的节点。(我所说的“最顶端”是指用户实际看到的最顶端。) 我没有找到SpriteKit的任何预定义功能来提供此功能。 实际上,我发现SpriteKit本身使用了一些反直觉的命中测试 我自己实现这一点的想法是计算一些全局z排序,如Dobroćudni Tapir在回答中所述 我认为这可能行得通,让我困惑的是文档中的陈述: 重要提示:SKCropNode和SKEffectNode

我正在使用Spritekit,希望有一个直观的命中测试。 换句话说:我得到了一个位置x,y,想找出哪个节点是被击中的最上面的节点。(我所说的“最顶端”是指用户实际看到的最顶端。)

我没有找到SpriteKit的任何预定义功能来提供此功能。 实际上,我发现SpriteKit本身使用了一些反直觉的命中测试

我自己实现这一点的想法是计算一些全局z排序,如Dobroćudni Tapir在回答中所述

我认为这可能行得通,让我困惑的是文档中的陈述:

重要提示:SKCropNode和SKEffectNode节点类会改变场景渲染行为。这些节点的子节点作为单独的节点树独立渲染,结果渲染到包含裁剪或效果节点的树中。有关详细信息,请参见使用其他节点类型

在“了解节点树的绘图顺序”下查找

我没有找到引用的“使用其他节点类型”点,因此我不知道SKCropNodes或SKEffectNodes应如何以及为什么更改绘图顺序

因此,以下问题的答案可以帮助我:

  • SpriteKit是否提供了一些检索图形顺序的功能
  • 如果没有,您认为我的自定义实现工作正常吗?(如何裁剪或影响节点来破坏它?)
  • 你能给我指一下关于这个问题的信息吗?就像丢失的“使用其他节点”文章一样
更新:

我刚发现报告的行为不正确

正如在评论中提到的,我被指向nodeAtPosition或nodesAtPosition。我在中使用了代码并进行了测试

结果并不令人满意。两个问题:

  • 在NodeStatPosition中忽略set zPosition。独立如果前面是蓝色或红色正方形,则在nodesAtPosition返回的数组中得到相同的顺序
  • 这些函数使用累积帧。但是在一个完美的例子中,我想使用每个节点的确切大小,而不是累积的帧
  • 一些图片到1:


    SK编程指南明确规定,命中测试按相反的绘制顺序进行。这似乎是你想要的,而且定义得很好。你对此有什么参考资料吗?我的发现表明情况并非如此。如果我错了。你能指出SpriteKit中的一个函数,在那里我可以显式地对某个位置执行命中测试吗?这对你的代码逻辑有什么重要意义?关键是我从硬件中获取需要处理到场景中的事件。此时,我需要决定将事件引用到哪个节点。因此,我现在需要知道哪个节点位于绘图顺序顶部的位置x,y。问题是我没有找到任何东西来获得这个绘图顺序,也没有问SpriteKit类似“哪个是位置x,y的顶部节点”@NieLernend See(搜索标题为命中测试顺序与绘图顺序相反的部分)。