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

标签 swift sprite-kit overlay blur scenekit

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

This is the ColorPanel SKScene

另一个问题:我是用这个方法添加面板的:

 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/

相关文章:

ios - 如何在 SpriteKit 中模拟一个比屏幕还大的世界?

swift - 如何让两个 SKSpriteNode 的位置始终相同?

Ffmpeg:将 slider "image"在 "background"上从 0% 移动到 100% 与音频同步

ios - 如何更新 TableView 中的数据(Swift)

ios - 以编程方式绘制 iOS 7 风格的圆圈

swift - 来自 Xib 和 Swift 3 的 Cell

ios - 无法使用 Swift 2 将空的数组数组转换为 JSON

ios - 使用 NSTimer Swift 生成 SkShapeNodes

ios - 在IOS中录制带有实时时间戳水印的视频,最好使用appcelerator

css - DIV 覆盖 DIV,最后面 DIV 中的链接不可访问