1

我正在使用 Spritekit 并希望进行一次命中测试,这很直观。换句话说:我得到了一个位置 x,y 并想找出哪个是被击中的最顶部的节点。(而“最顶层”是指用户实际认为最顶层的那个。)

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

我自己实现这一点的想法是计算一些全局 z 排序,就像Dobroćudni Tapir在此处的答案中所描述的那样。

我认为这可能有效,让我感到困惑的是文档中的声明:

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

要在“了解节点树的绘制顺序”下找到此处。

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

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

  • SpriteKit 是否提供一些功能来检索绘图顺序?
  • 如果没有,您认为我的自定义实现有效吗?(作物或效果节点如何破坏它?)
  • 你能给我指出关于这个问题的信息吗?喜欢缺少的“与其他节点一起工作”文章吗?

更新:

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

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

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

  1. 在 nodesAtPosition 中设置的 zPosition 被忽略。独立如果蓝色或红色方块在前面,我在nodesAtPosition中返回的数组中得到相同的顺序。
  2. 这些函数使用累积帧。但在一个完美的情况下,我想使用每个节点的确切大小而不是累积的帧。

一些图片到1。: 在此处输入图像描述

在此处输入图像描述

4

0 回答 0