1

そのため、私のゲームには一時停止ボタンがあり、それを押すとシーンが一時停止し、1 つの SKNode (一時停止メニュー) を除くすべてがぼやけます。これを行うには、フィルターを持つ SKEffectNode を作成し、それに一時停止メニュー以外のすべてを追加します。動作しますが、ぼかしが背景に表示されるまでに 2 秒かかります。ボタンを押すとすぐにシーンが一時停止しますが、ぼかしと一時停止メニューは数秒後に表示されます。何か案は?

コードは次のとおりです。

     override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

         for touch in (touches as! Set<UITouch>) {
            let location = touch.locationInNode(self)

            if (self.nodeAtPoint(location).name == "PauseButton"){
                if(!scene!.paused) {
                    blurScene()

                    scene!.paused = true
                    self.addChild(pauseMenu!)
                }else {
                    removeBlur()

                    scene!.paused = false
                    pauseMenu!.removeFromParent()
                }
            }
        }
    }

    func blurScene() {
        blurNode = SKEffectNode() //Created in the beginning of the class
        let blur = CIFilter(name: "CIGaussianBlur",    withInputParameters: ["inputRadius": 15.0])
        blurNode!.filter = blur
        self.shouldEnableEffects = true

        for node in self.children {
            node.removeFromParent()
            blurNode!.addChild(node as! SKNode)
        }

        self.addChild(blurNode!)
    }

    func removeBlur() {
        var blurredNodes = [SKNode]()

        for node in blurNode!.children {
            blurredNodes.append(node as! SKNode)
            node.removeFromParent()
        }

        for node in blurredNodes {
            self.addChild(node as SKNode)
        }

        self.shouldEnableEffects = false
        blurNode!.removeFromParent()
    }
4

1 に答える 1