2

私は現在 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 よりも低い) に変更すると、次のようになります。

ここに画像の説明を入力

ここではすべてが隠されていますが、まだ良くありません。

SpriteKit はこの種の状況をサポートしていないという 2015 年の古いスタック オーバーフローの質問を読みました。今でもそうですか?とにかく、回避策はありますか?

4

1 に答える 1