SpriteKit Swift 使整个场景变暗,然后再改回来

SpriteKit Swift make an entire scene darker, then change it back

有没有办法让整个场景,包括它的所有子节点(不仅仅是背景色)的颜色变深?我正在寻找类似于此代码的效果:

node.color = SKColor.blackColor()
node.colorBlendFactor = 0.25

以上代码将 node 着色为较深的颜色,同时保持原始颜色(除了那些颜色更深)和细节。 但是,据我所知,此代码不适用于场景,它仅适用于 SKSpriteNode。有什么办法可以使整个场景变暗吗?答案可能是某种滤镜,一种为场景着色的特殊方法,或者可能就是没有办法。任何帮助!

谢谢

当我需要做类似于你所要求的事情时,我只需在其他所有内容之上添加一个 SKSpriteNode,如下所示:

let dimPanel = SKSpriteNode(color: UIColor.blackColor(), size: self.size)
dimPanel.alpha = 0.75
dimPanel.zPosition = 100
dimPanel.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
self.addChild(dimPanel)

只需确保面板的 zPosition 大于您要调暗的所有内容。

这样,您还可以使用 SKAction.colorizeWithColor 将面板更改为您想要的任何颜色。

要添加面板然后删除它,您可以从 0 开始 alpha,然后执行:

dimPanel.runAction(SKAction.sequence([
    SKAction.fadeAlphaTo(0.75, duration: 3),
    SKAction.fadeOutWithDuration(3)
]))

The answer could be some sort of filter...

确实如此。而 is quite practical, it's not the only way. SKScene inherits from SKEffectNode,因此您可以将 Core Image 滤镜(或滤镜链)应用到整个场景,作为使其变暗或添加其他视觉效果的一种方式。

一旦你进入 Core Image filters,你就有了各种变暗的选项——例如,你可以通过将参数增加到 CIExposureAdjust 而获得与 CIToneCurve 不同的效果.或者您可以组合多个滤镜,这样您的场景(例如)会淡化为灰度并在变暗时变得模糊。

注意:没有 SKActions 用于动画 Core Image 滤镜,但您可以在 update 函数或 customActionWithDuration:actionBlock:块。