我目前正在使用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年的一个旧的堆栈溢出问题中看到,SpriteKit不支持这种情况。现在还是这样吗?不管怎样,有什么变通的办法吗?
发布于 2021-10-11 09:56:35
我也遇到了同样的问题,并找到了解决方案。
覆盖的精灵
下面是一个示例:
sprite.shadowedBitMask = 0b0001
sprite.zPosition = 1
light.zPosition = 2
light.categoryBitMask = 0b0001https://stackoverflow.com/questions/46163181
复制相似问题