我目前正在使用 SKLightNode,屏幕上有一些精灵。我希望这些精灵根据灯光的位置投射阴影,但我希望显示由灯光直接照亮的精灵,并隐藏另一个精灵后面的精灵。
我有这个代码:
let light = SKLightNode()
override func didMove(to view: SKView)
{
light.categoryBitMask = 1
light.falloff = 1.0
light.shadowColor = SKColor.black
light.zPosition = 2
addChild(light) // I add the light
for _ in 0...10
{
let object = SKSpriteNode(imageNamed: "stone")
object.position = CGPoint(x: CGFloat.random(min: playableRect.minX, max: playableRect.maxX), y: CGFloat.random(min: playableRect.minY, max: playableRect.maxY))
object.shadowCastBitMask = 1
object.zPosition = 2
addChild(object) // I add 10 wall sprites
}
}
如您所见,问题在于阴影中的精灵没有隐藏。
当我将墙壁的 zPosition 更改为 1(低于灯光的 zPosition)时,我有这个:
这里一切都隐藏了,仍然不好。
我在 2015 年的一个旧 stackoverflow 问题中读到 SpriteKit 不支持这种情况。还是这样吗?无论如何,有解决方法吗?