SpriteKit 聚光灯效果

SpriteKit spotlight effect

我正在尝试使用 Sprite Kit 为 iOS 游戏创建聚光灯效果。目标是通过在屏幕边缘弹跳的几个移动聚光灯来显示背景。

我已经使用 SKCropNode 或更简单的 SKSpriteNode 成功地找到了一个移动聚光灯的解决方案。

对于 SKSpriteNode 解决方案,我只是在我的场景之上(即它是最后添加的子节点)添加了一个 SKSpriteNode,它是一个比场景大(1.5 倍长和 1.5 倍宽)的图像。该图像是一个黑色矩形,中间有一个透明圆圈(使用 alpha 通道)。我添加了一个等于圆圈大小的物理体。我给了它一个冲动,其余的由 SpriteKit 完成。然后我有一个漂亮的聚光灯四处弹跳并显示透明圆圈后面(或下面)的所有内容(即添加到场景中的任何精灵)。

对于 SKScropNode 解决方案,我创建了一个 SKCropNode,并在其中添加了背景精灵。然后我用一个仅由透明圆圈构成的图像定义了 SKSCropNode 的掩码。我还添加了一个等于圆圈大小的物理体,给了它一个冲动并且它起作用了。几乎是事实上,因为我找不到一种方法让蒙版的非透明部分成为背景颜色以外的东西。我希望它像我对 SKSpriteNode 解决方案所做的那样是黑色的,即使场景的背景颜色不是黑色。

我也尝试过使用 SKLightNode,但结果不如上述解决方案好,因为光线漫射太多,不允许有精确的光环。我想要内部完全透明外部完全黑色,没有从透明到黑色的渐变。

我的主要问题是我需要 3 个弹跳聚光灯,而不仅仅是一个。

使用 SKSpriteNode 解决方案,如果我添加 3 个 SKSpriteNode,顶部 SKSpriteNode 的黑色部分会覆盖下面另外 2 个 SKSpriteNode 的白色圆圈。

使用 SKCropNode 解决方案,每个 SKScropNode 只能有一个掩码。我尝试级联 SKScropNode 但它不起作用。

是否有任何其他选项可以实现此效果(在 swift 中)?

感谢任何建议。

您可以创建一个父节点(SKNode),将您的聚光灯节点作为子节点添加到此节点,然后将此父节点设置为maskNode 到包含背景的单个SKCropNode 作为子节点。