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

我做了一些photoshop的例子。
这是阴影电流行为:

这是所需的阴影行为:

这可以在SpriteKit中实现吗?
发布于 2018-08-27 00:20:07
颜色空间
嗨,首先,请注意有不同的色彩空间。混合两种颜色的结果取决于您要使用的颜色空间。
RGB颜色空间
使用此空间颜色,您可以表示两个光线的交点。
在这种情况下,当两种颜色混合时,交叉点会更亮。

您可以使用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)
}
}结果呢?

CMY色彩空间
该颜色空间表示混合两种流体的真实场景。现在,混合到颜色会产生一种新的更深的颜色。

只需使用blendMode = .multiply ( IO建议使用白色背景),就可以在SpriteKit中获得此效果。
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)
}
}

https://stackoverflow.com/questions/52021698
复制相似问题