将背景模糊添加到SKSpriteNode(或SKScene)

Lor*_*tti 3 overlay blur scenekit sprite-kit swift

我在SCNScene上有一个OverlayPanel SKScene.此面板包含SKSpriteNode颜色.我不知道如何向面板添加背景模糊效果.

这是ColorPanel SKScene

另一个问题:我使用此方法添加面板:

 colorPanelScene = SKScene(fileNamed: "art.scnassets/ColorPanelScene")!
 SCNsceneView.overlaySKScene = colorPanelScene
 SCNsceneView.overlaySKScene!.userInteractionEnabled = true;
Run Code Online (Sandbox Code Playgroud)

这是正确的方法还是我应该将面板创建为单独的UIView(并以简单的方式应用模糊效果)?

Kni*_*gon 6

您可以添加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);
}
Run Code Online (Sandbox Code Playgroud)

然后,再添SKNode上的顶部SKEffectNode,但要确保它不是的一个孩子SKEffectNode.将所有叠加元素都抛入其中SKNode.