web-dev-qa-db-ja.com

SKSpriteNodeに光る効果を追加します

暗い画面に黒い動きのある画像があります。見やすくするために、画像に白い輝きを追加したいと思います。これは動画の私のコードです:

   Ghost = SKSpriteNode(imageNamed: "Ghost1")
Ghost.size = CGSize(width: 50, height: 50)
Ghost.position = CGPoint(x: self.frame.width / 2 - Ghost.frame.width, y: self.frame.height / 2)

Ghost.physicsBody = SKPhysicsBody(circleOfRadius: Ghost.frame.height / 1.4)
Ghost.physicsBody?.categoryBitMask = PhysicsCatagory.Ghost
Ghost.physicsBody?.collisionBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall
Ghost.physicsBody?.contactTestBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall | PhysicsCatagory.Score
Ghost.physicsBody?.affectedByGravity = false
Ghost.physicsBody?.isDynamic = true
Ghost.zPosition = 2

self.addChild(Ghost)

グローを追加する方法や方法がわかりません。詳細が必要な場合は、お問い合わせください。

18
Oren Edrich

この拡張機能を作成して、SKSpriteNodeにグロー効果を追加しました

これをプロジェクトに追加するだけです

extension SKSpriteNode {

    func addGlow(radius: Float = 30) {
        let effectNode = SKEffectNode()
        effectNode.shouldRasterize = true
        addChild(effectNode)
        effectNode.addChild(SKSpriteNode(texture: texture))
        effectNode.filter = CIFilter(name: "CIGaussianBlur", withInputParameters: ["inputRadius":radius])
    }
}

SKSpriteNodeが与えられました

let Sun = SKSpriteNode(imageNamed: "Sun")

あなたがしなければならないすべて

Sun.addGlow()

enter image description here

30
Luca Angeletti

これに追加するだけで、SKViewインスタンスで使用可能なtexture(from:SKNode)メソッドを使用してコンテンツを最初にレンダリングすることにより、任意のタイプのSKNodeでこれを実行できます。

例:

extension SKNode
{
    func addGlow(radius:CGFloat=30)
    {
        let view = SKView()
        let effectNode = SKEffectNode()
        let texture = view.texture(from: self)
        effectNode.shouldRasterize = true
        effectNode.filter = CIFilter(name: "CIGaussianBlur",withInputParameters: ["inputRadius":radius])
        addChild(effectNode)
        effectNode.addChild(SKSpriteNode(texture: texture))
    }
}
4
prolific8