SpriteKit聚光灯效果

时间:2015-03-01 19:11:38

标签: swift sprite-kit crop

我试图使用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中)?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

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