SpriteKit-SKLightNode阴影混合模式

时间:2018-08-25 22:25:31

标签: ios iphone swift sprite-kit

我有3个SKLightNode,每个都有一个浅色:红色,绿色和蓝色。我想要的效果是由SKLightNodes生成的阴影具有混合模式。 Xcode模拟器 Xcode Simulator

我做了一些Photoshop的例子。

这是影子当前行为: This is the shadow current behavior

这是所需的阴影行为: This is the shadow behavior desired:

这可以在SpriteKit中完成吗?

1 个答案:

答案 0 :(得分:0)

色彩空间

首先,请注意,存在不同的色彩空间。 混合两种颜色的结果取决于您要使用的颜色空间。

RGB颜色空间

使用这种空间颜色,您可以代表2条光线的交点。

在这种情况下,当两种颜色混合在一起时,交点会变亮。

enter image description here

您可以使用blendMode = .add在SpriteKit中获得这种效果。

这是完整的代码。

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色彩空间

此颜色空间代表混合2种流体的真实世界场景。 现在,混合颜色会产生新的深色。

enter image description here

您只需使用blendMode = .multiply就可以在SpriteKit中获得这种效果(并且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