そのため、私のゲームには一時停止ボタンがあり、それを押すとシーンが一時停止し、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()
}