私は現在 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 年の古いスタック オーバーフローの質問を読みました。今でもそうですか?とにかく、回避策はありますか?