SpriteKit - добавление размытия на всю сцену
Я пытаюсь размыть всю свою GameScene, когда нажата моя кнопка паузы. У меня есть метод blurSceen(), но он, кажется, не добавляет эффект к сцене. Есть ли способ, которым я могу сделать это, или я делаю что-то не так? Я просмотрел другие посты на эту тему, но не смог добиться эффекта.
func blurScreen() {
let effectsNode = SKEffectNode()
let filter = CIFilter(name: "CIGaussianBlur")
let blurAmount = 10.0
filter!.setValue(blurAmount, forKey: kCIInputRadiusKey)
effectsNode.filter = filter
effectsNode.position = self.view!.center
effectsNode.blendMode = .Alpha
// Add the effects node to the scene
self.addChild(effectsNode)
}
3 ответа
От SKEffectNode
документы:
SKEffectNode
объект рендерит свои дочерние элементы в буфер и при необходимости применяет фильтр Core Image к этому визуализированному выводу.
Узел эффекта применяет фильтр только к своим дочерним узлам. У вашего узла эффекта нет дочерних элементов, поэтому нет ничего, к чему можно применить фильтр.
Вероятно, вы хотите добавить узел эффекта к вашей сцене на ранней стадии - но пока не устанавливайте фильтр для него - и поместите все узлы, которые вы позже захотите размыть, как их дочерние элементы. Когда приходит время применить размытие, установите фильтр на (уже существующий, уже с дочерними) узле эффекта.
У меня была та же самая проблема, пытаясь размыть всю сцену SKS, и она просто не работала. Недостающим элементом головоломки была эта строка:
shouldEnableEffects = true
Свифт 4:
от gameScene:
let blur = CIFilter(name:"CIGaussianBlur",withInputParameters: ["inputRadius": 10.0])
self.filter = blur
self.shouldRasterize = true
self.shouldEnableEffects = true