2016-08-04 80 views
2

我想按我的暫停按鈕時,模糊了我的整個GameScene。我有一個名爲blurSceen()的方法,但它似乎並未將效果添加到場景中。有沒有辦法我可以做到這一點,或者我做錯了什麼?我查看過關於這個主題的其他帖子,但一直未能達到這個效果。SpriteKit - 添加一個模糊到整個場景

 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) 
     } 
+0

也許你應該只考慮模糊一些節點的場景。如果模糊整個場景,則文本(例如樂譜,遊戲狀態)也將變模糊。這裏有一個例子:http://stackoverflow.com/questions/26385156/how-to-blur-everything-except-2-nodes-spritekit-swift – Epsilon

+0

@Epsilon這是我跟着教程,並沒有在我的場景越來越我稱之爲上述方法後模糊不清。 – Brejuro

+0

您是否將節點添加爲'effectsNode'的子節點?只有添加到效果節點的節點會變模糊。 – Epsilon

回答

3

SKEffectNode docs

一個SKEffectNode對象呈現其孩子到緩衝區和任選施加核心圖像過濾此呈現的輸出。

效果節點應用過濾器只到其子節點。你的效果節點沒有孩子,所以沒有什麼可以應用過濾器。

也許你想要的是一個效果節點添加到您的場景早就 - 但不要在其上設置過濾器還沒有 - 把所有你以後要在模糊作爲其子節點。當需要應用模糊時,請將過濾器設置爲(已經存在,已有子節點)效果節點。

+0

但我需要模糊的東西已經有一個父母,這是場景本身。 – Brejuro

+0

如果你想模糊*所有*,你很幸運 - 'SKScene'是'SKEffectNode'的一個子類,所以你可以將過濾器應用到場景本身。只有在有*節點不需要模糊的節點時,才需要添加自己的效果節點(在這種情況下,您需要將效果節點的子節點變得模糊,並使其他節點保持未模糊的子節點節點或場景)。 – rickster

+0

我該如何做到這一點?我認爲我上面的代碼會做到這一點。 – Brejuro

1

我不得不試圖模糊整個SKScene同樣的問題,它只是不工作。拼圖缺少的部分是這條線:

shouldEnableEffects = true 
0

斯威夫特4:

從gameScene:

let blur = CIFilter(name:"CIGaussianBlur",withInputParameters: ["inputRadius": 10.0]) 
    self.filter = blur 
    self.shouldRasterize = true 
    self.shouldEnableEffects = true