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,您就有各种变暗选项——例如,将参数渐变到CIExposureAdjust
与CIToneCurve
相比,您可以获得不同的效果。或者您可以组合多个滤镜,这样您的场景(例如)会随着变暗而淡化为灰度并变得模糊。
注意:没有用于动画 Core Image 滤镜的 SKAction
s,但您可以在 update
函数或 customActionWithDuration:actionBlock:
块中随时间更改 CIFilter
对象的参数。
【讨论】:
感谢您的提示,但我想我会坚持使用更简单的选项。这就是我现在所需要的。稍后我会记住核心图像过滤器,但如果我需要更复杂的东西。以上是关于SpriteKit Swift 使整个场景变暗,然后将其改回的主要内容,如果未能解决你的问题,请参考以下文章
Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应
SpriteKit:你如何突出场景的一部分,就像在教程中一样?
Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?