我有3个SKLightNode,每个都有一个浅色:红色,绿色和蓝色。我想要的效果是由SKLightNodes生成的阴影具有混合模式。 Xcode模拟器
我做了一些Photoshop的例子。
这是影子当前行为:
这是所需的阴影行为:
这可以在SpriteKit中完成吗?
答案 0 :(得分:0)
首先,请注意,存在不同的色彩空间。 混合两种颜色的结果取决于您要使用的颜色空间。
使用这种空间颜色,您可以代表2条光线的交点。
在这种情况下,当两种颜色混合在一起时,交点会变亮。
您可以使用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)
}
}
结果
此颜色空间代表混合2种流体的真实世界场景。 现在,混合颜色会产生新的深色。
您只需使用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)
}
}