SpriteKit - режим смешивания теней SKLightNode - PullRequest
0 голосов
/ 26 августа 2018

У меня есть 3 SKLightNode, каждый из которых имеет светлый цвет: красный, зеленый и синий.Эффект, который я хочу, состоит в том, чтобы тень, генерируемая узлами SKLight, имела режим наложения.Xcode Simulator Xcode Simulator

Я сделал несколько примеров фотошопа.

Это текущее поведение тени: This is the shadow current behavior

Это желаемое поведение тени: This is the shadow behavior desired:

Возможно ли это сделать в SpriteKit?

1 Ответ

0 голосов
/ 26 августа 2018

Цветовое пространство

Привет, прежде всего, обратите внимание, что существуют разные цветовые пространства. Результат смешивания двух цветов зависит от цветового пространства, которое вы хотите использовать.

Цветовое пространство RGB

С этим пространственным цветом вы можете представить пересечение 2-х световых лучей.

В этом случае, когда смешаны 2 цвета, пересечение становится ярче.

enter image description here

Вы можете получить этот эффект в SpriteKit, используя blendMode = .add.

Вот полный код.

import SpriteKit

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        let red = SKShapeNode(circleOfRadius: 100)
        red.fillColor = .red
        red.blendMode = .add
        red.position = CGPoint(x: 0, y: 0)
        addChild(red)

        let green = SKShapeNode(circleOfRadius: 100)
        green.fillColor = .green
        green.blendMode = .add
        green.position = CGPoint(x: 0, y: 100)
        addChild(green)

        let blue = SKShapeNode(circleOfRadius: 100)
        blue.fillColor = .blue
        blue.blendMode = .add
        blue.position = CGPoint(x: 87, y: 50)
        addChild(blue)
    }
}

И результат

enter image description here

CMY Цветовое пространство

Это цветовое пространство представляет собой реальный сценарий смешивания двух жидкостей. Теперь смешивание с цветами дает новый более темный цвет.

enter image description here

Вы можете получить этот эффект в SpriteKit, просто используя blendMode = .multiply (и IO предлагает белый фон).

import SpriteKit

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        self.backgroundColor = .white

        let yellow = SKShapeNode(circleOfRadius: 100)
        yellow.fillColor = .yellow
        yellow.blendMode = .multiply
        yellow.position = CGPoint(x: 0, y: 0)
        addChild(yellow)

        let cyan = SKShapeNode(circleOfRadius: 100)
        cyan.fillColor = .cyan
        cyan.blendMode = .multiply
        cyan.position = CGPoint(x: 0, y: 100)
        addChild(cyan)

        let magenta = SKShapeNode(circleOfRadius: 100)
        magenta.fillColor = .magenta
        magenta.blendMode = .multiply
        magenta.position = CGPoint(x: 87, y: 50)
        addChild(magenta)

    }
}

enter image description here

...