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
Другие вопросы по тегам