sprite-kit - CIFilter GaussianBlur 似乎在 iOS9.x 上被破坏了(与 SKEffectNode 一起使用)

标签 sprite-kit ios9 cifilter

我正在尝试使用以下代码片段创建模糊效果:

  let glowEffectNode = SKEffectNode()
  glowEffectNode.shouldRasterize = true

  let glowSize = CGSize(width: barSize.width, height: barSize.height)
  let glowEffectSprite = SKSpriteNode(color: barColorData.topColor, size: glowSize)
  glowEffectNode.addChild(glowEffectSprite)

  let glowFilter = CIFilter(name: "CIGaussianBlur")
  glowFilter!.setDefaults()
  glowFilter!.setValue(5, forKey: "inputRadius")

  glowEffectNode.filter = glowFilter

当然,它在 iOS 8.x 上运行完美,但在 iOS 9.x 上(在 9.0 和 9.1 上都试过)模糊无法正常运行。 (在模拟器上,节点似乎有点透明,但绝对不模糊,在设备上,它看起来模糊但被裁剪了,并且从中心位置也有偏移:/)

有没有使用 CIFilter 快速解决这个问题的方法?

最佳答案

我对此进行了更多调整并找到了解决方案...

首先,似乎使用奇数作为模糊半径会导致整个节点以偏移量 (???) 呈现,因此使用 10 例如可以解决偏移量问题。

其次,似乎模糊被裁剪了,因为整个节点都是渲染的 Sprite ,为了获得模糊效果,你需要一个额外的空间,所以我为额外的空间使用了一个透明的 Sprite ,下面的代码片段现在可以工作了:

let glowEffectNode = SKEffectNode()
glowEffectNode.shouldRasterize = true

let glowBackgroundSize = CGSize(width: barSize.width + 60, height: barSize.height + 60)
let glowSize = CGSize(width: barSize.width + 10, height: barSize.height + 10)
let glowEffectSprite = SKSpriteNode(color: barColorData.topColor, size: glowSize)
glowEffectNode.addChild(SKSpriteNode(color: SKColor.clearColor(), size: glowBackgroundSize))
glowEffectNode.addChild(glowEffectSprite)

let glowFilter = CIFilter(name: "CIGaussianBlur")
glowFilter!.setDefaults()
glowFilter!.setValue(10, forKey: "inputRadius")

glowEffectNode.filter = glowFilter

我应该提到我正在使用 view.textureFromNode(glowEffectNode) 从这个节点创建一个纹理以提高效率,但我尝试使用节点本身并且问题仍然存在所以上面应该无论如何工作

关于sprite-kit - CIFilter GaussianBlur 似乎在 iOS9.x 上被破坏了(与 SKEffectNode 一起使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33455823/

相关文章:

macos - SpriteKit 保留周期或内存泄漏

ios - 图像作为 NavigationBar 的 titleView

iOS 9 iPad 分屏完成/完成通知

ios - CMSampleBuffer 在 Swift 3 中从纵向旋转到横向

ios - 将我的敌人类实现到游戏场景

ios - 如何重命名 iOS SpriteKit 模板中的默认场景?

ios - Xcode 7/iOS 9 中的 Api 调用错误(如何在 plist 中设置 App Transport Security)

ios - 无法使用 CIFilter 从 CIImage 中提取 UIImage

ios - Objective-C : CIFilter returning nil image

swift - 如何让这个二元运算符与 CGFloats 一起工作?