Я использую Xcode 11.4.1 и Swift 5.2.2, и я пытаюсь отбросить тень с помощью SKLightNode на круговой SKSpriteNode.
Однако тень отбрасывается на прямоугольную angular рамку SpriteNode, а не на изображение круга png, которое я использую.
Это желаемый эффект
Вот что происходит
В первом изображении я использую круг размером 611x611px PNG, а во втором я использую 612x612 PNG. Я обнаружил, что эта «угловая тень» возникает только при использовании определенных c размеров изображения для создания SpriteNode.
В частности, в ходе моего тестирования квадратные изображения размером <688 пикселей и> 601 пикселей не отображают тени углов, кроме размеров точно 612 и 608. Я тестирую это на игровой площадке, но та же проблема происходит в полном xcodeproj.
Что я здесь сделал не так? Я сомневаюсь, что проблема в моем коде, но вот он:
import PlaygroundSupport
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
let background = SKSpriteNode(color: UIColor.blue, size: frame.size)
background.zPosition = 0
background.position = CGPoint(x: frame.midX, y: frame.midY)
background.lightingBitMask = 1
addChild(background)
let light = SKLightNode()
light.zPosition = 100
light.categoryBitMask = 1
light.falloff = 0.5
light.lightColor = UIColor.white
light.position = CGPoint(x: frame.midX, y: frame.midY)
addChild(light)
let sprite = SKSpriteNode(imageNamed: "612.png")
sprite.color = UIColor.yellow
sprite.colorBlendFactor = 1
sprite.zPosition = 3
sprite.position = CGPoint(x: frame.midX, y: frame.midY + 100)
sprite.size = CGSize(width: 100, height: 100)
sprite.physicsBody = SKPhysicsBody(circleOfRadius: 50)
sprite.physicsBody?.categoryBitMask = 2
sprite.shadowCastBitMask = 1
sprite.lightingBitMask = 1
sprite.physicsBody?.isDynamic = false
addChild(sprite)
}
}
let sceneView = SKView(frame: CGRect(x:0 , y:0, width: 640, height: 480))
let scene = GameScene()
scene.scaleMode = .aspectFill
scene.size = sceneView.frame.size
sceneView.presentScene(scene)
PlaygroundSupport.PlaygroundPage.current.liveView = sceneView