SpriteKit Swift 使整个场景变暗,然后将其改回

Posted

技术标签:

【中文标题】SpriteKit Swift 使整个场景变暗,然后将其改回【英文标题】:SpriteKit Swift make an entire scene darker, then change it back 【发布时间】:2015-12-20 20:20:03 【问题描述】:

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

当我需要做与您所要求的类似的事情时,我只需在其他所有内容之上添加一个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)
]))

【讨论】:

谢谢。这似乎是解决问题的一种非常简单有效的方法。我想我想多了。再次感谢!【参考方案2】:

答案可能是某种过滤器...

的确如此。虽然@TrentSartain's answer 非常实用,但它不是唯一的方法。 SKScene 继承自 SKEffectNode,因此您可以将 Core Image 滤镜(或滤镜链)应用于整个场景,以使其变暗或添加其他视觉效果。

一旦您进入Core Image filters,您就有各种变暗选项——例如,将参数渐变到CIExposureAdjustCIToneCurve 相比,您可以获得不同的效果。或者您可以组合多个滤镜,这样您的场景(例如)会随着变暗而淡化为灰度并变得模糊。

注意:没有用于动画 Core Image 滤镜的 SKActions,但您可以在 update 函数或 customActionWithDuration:actionBlock: 块中随时间更改 CIFilter 对象的参数。

【讨论】:

感谢您的提示,但我想我会坚持使用更简单的选项。这就是我现在所需要的。稍后我会记住核心图像过滤器,但如果我需要更复杂的东西。

以上是关于SpriteKit Swift 使整个场景变暗,然后将其改回的主要内容,如果未能解决你的问题,请参考以下文章

Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应

SpriteKit:你如何突出场景的一部分,就像在教程中一样?

three.js:在一定距离内,整个场景在阴影中变暗

Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?

SpriteKit Swift 2.0 游戏:跨多个场景的按钮和节点

Swift / Spritekit:通过特定场景播放音乐