2014-10-15 10 views
9

Ich mag würde den Hintergrund meines Spiels verschwimmen, wennWie alles außer 2 Knoten zu verwischen. Spritekit (Swift)

self.view?.scene?.paused = true 

Aber die auf den Knopf und das pausierten Label (beide SKSpriteNode ist) nicht verwischen sein. Sie haben alle unterschiedliche Z-Index-Werte. Die Szene wird angehalten, wenn der Knopfknoten gedrückt wird, und fortgesetzt, wenn die Taste erneut gedrückt wird.

Ich kann einen Weg finden, dies in Swift zu erreichen. Ich habe einige Vorschläge gefunden, die SKEffectNode verwenden?

Antwort

10

Die grundlegenden Schritte ...

  1. eine SKEffectsNode erstellen
  2. ein CIGaussianBlur CIFilter
  3. die Filter auf die Effekte zuweisen Knoten
  4. Knoten werden Knoten mit dem Effekt-Knoten (child In erstellen sein verschwommen)

und Beispielcode in Swift ...

// 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

Wie entblöße ich sie? Würde ich einfach den 'effectsNode' entfernen, oder würde ich alle seine Kinder entfernen? –

+0

Auch die Zeile 'filter.setValue (blurAmount, forKey: kCIInputRadiusKey)' gibt einen Fehler aus, der besagt "Senden von float an den Parameter des inkompatiblen Typs 'id'" **. Wenn es überhaupt von Bedeutung ist, habe ich diesen Code in Ziel-c umgewandelt. –

+0

@ChristianKRider Hier ist eine obj-c Version dieser Anweisung: '[filter setValue: [NSNummer numberWithFloat: 10.0] forKey: kCIInputRadiusKey];'. Um die Sprites zu entblinden, kannst du sie entweder aus dem Effektknoten entfernen und sie dann zur Szene hinzufügen oder 'effectsNode.filter = nil; 'setzen. – 0x141E