我在 SCNScene 上有一个 OverlayPanel SKScene。此面板包含颜色作为 SKSpriteNode。我不知道如何为面板添加背景模糊效果。
另一个问题:我是用这个方法添加面板的:
colorPanelScene = SKScene(fileNamed: "art.scnassets/ColorPanelScene")!
SCNsceneView.overlaySKScene = colorPanelScene
SCNsceneView.overlaySKScene!.userInteractionEnabled = true;
这是正确的方法还是我应该将面板创建为单独的 UIView(并以更简单的方式应用模糊效果)?
最佳答案
您可以将 SKEffectsNode
添加到您的叠加场景中以实现此效果。
虽然这有点棘手,但按照您的方式加载它是不够的。
此方法仅适用于静态背景。基本上我们要做的是截屏背景,并将其加载到 SKEffectNode
中以使其模糊。
在 SceneKit 编辑器中,将一个节点添加到场景中(确保它不是其他节点的子节点)并确保将此节点的类设置为具有名称的 SKEffectNode
,我将其称为 EffectNode。这应该在设计时具有最低的 zPosition
。
然后在代码中,您要执行以下操作:
if let effectNode = colorPanelScene.childNodeWithName("EffectNode") as? SKEffectNode {
let blur = CIFilter(name:"CIGaussianBlur",withInputParameters: ["inputRadius": 10.0]);
effectNode.filter = blur;
effectNode.shouldRasterize = true;
effectNode.shouldEnableEffects = true;
UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let node = SKSpriteNode(texture:SKTexture(image: image));
effectNode.addChild(node);
}
然后,在 SKEffectNode
之上添加另一个 SKNode
,但要确保它不是 SKEffectNode
的子节点。将所有叠加元素放入此 SKNode
。
关于swift - 将背景模糊添加到 SKSpriteNode(或 SKScene),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455395/