首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKLightNode的阴影不隐藏精灵

SKLightNode的阴影不隐藏精灵
EN

Stack Overflow用户
提问于 2017-09-12 03:34:49
回答 1查看 136关注 0票数 2

我目前正在使用SKLightNode,我在屏幕上显示了一些精灵。我希望这些精灵根据光线的位置投射阴影,但我希望显示被光线直接照亮的精灵,隐藏另一个精灵后面的精灵。

我有这样的代码:

代码语言:javascript
复制
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不支持这种情况。现在还是这样吗?不管怎样,有什么变通的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-11 09:56:35

我也遇到了同样的问题,并找到了解决方案。

  1. add shadowedBitMask responding the sprite
  2. 确保光照位置高于应由阴影

覆盖的精灵

下面是一个示例:

代码语言:javascript
复制
sprite.shadowedBitMask = 0b0001
sprite.zPosition = 1
light.zPosition = 2
light.categoryBitMask = 0b0001
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46163181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档