2014-10-15 8 views
9

mi piacerebbe sfocare lo sfondo del mio gioco quandoCome sfocare tutto tranne 2 nodi. Spritekit (Swift)

self.view?.scene?.paused = true 

Ma il pulsante e l'etichetta di pausa (entrambi SKSpriteNode di) non dovrebbe essere mosso. hanno tutti valori Z-index diversi. La scena viene messa in pausa quando il nodo del pulsante viene premuto e ripristinato quando si preme di nuovo il pulsante.

Non riesco a trovare un modo per raggiungere questo obiettivo in Swift. ho trovato alcuni suggerimenti che usano SKEffectNode?

risposta

10

I passaggi fondamentali ...

  1. Crea uno SKEffectsNode
  2. Creare un CIGaussianBlur CIFilter
  3. Assegnare il filtro al nodo effetti
  4. aggiungere nodi al nodo effetti (nodi secondari saranno offuscata)

e codice di esempio a Swift ...

012.
// Create an effects node with a gaussian blur filter 
let effectsNode = SKEffectNode() 
let filter = CIFilter(name: "CIGaussianBlur") 
// Set the blur amount. Adjust this to achieve the desired effect 
let blurAmount = 10.0 
filter?.setValue(blurAmount, forKey: kCIInputRadiusKey) 

effectsNode.filter = filter 
effectsNode.position = self.view!.center 
effectsNode.blendMode = .alpha 

// Create a sprite 
let texture = SKTexture(imageNamed: "Spaceship") 
let sprite = SKSpriteNode(texture: texture) 

// Add the sprite to the effects node. Nodes added to the effects node 
// will be blurred 
effectsNode.addChild(sprite) 
// Add the effects node to the scene 
self.addChild(effectsNode) 

// Create another sprite 
let sprite2 = SKSpriteNode(texture: texture) 
sprite2.position = self.view!.center 
sprite2.size = CGSize(width:64, height:64); 
sprite2.zPosition = 100 

// Add the sprite to the scene. Nodes added to the scene won't be blurred 
self.addChild(sprite2) 
+0

Come rimuoverli? Dovrei semplicemente rimuovere 'effectNode', o rimuoverei tutti i suoi figli? –

+0

Inoltre, la riga 'filter.setValue (blurAmount, forKey: kCIInputRadiusKey)' sta generando un errore che dice ** "Invio float al parametro di tipo incompatibile 'id'" **. Se è importante, ho convertito questo codice in ogg-c. –

+0

@ChristianKRider ecco una versione obj-c di tale istruzione: '[filter setValue: [NSNumber numberWithFloat: 10.0] forKey: kCIInputRadiusKey];'. Per sbloccare gli sprite, puoi rimuoverli dal nodo degli effetti e quindi aggiungerli alla scena o impostare 'effectsNode.filter = nil;' – 0x141E

Problemi correlati