2014-10-15 12 views
9

Chciałbym rozmycie tła mojej grze, kiedyJak zamrozić wszystko oprócz 2 węzłów. Spritekit (Swift)

self.view?.scene?.paused = true 

ale przycisk i wstrzymane etykietę (zarówno SKSpriteNode) nie powinny być plama. wszystkie mają różne wartości indeksu Z. Scena zostaje zatrzymana, gdy przycisk zostanie naciśnięty i wznowiony po ponownym naciśnięciu przycisku.

Nie mogę znaleźć sposobu na osiągnięcie tego w Swift. znalazłem kilka sugestii, które używają SKEffectNode?

Odpowiedz

10

Podstawowe kroki ...

  1. Załóż SKEffectsNode
  2. Tworzenie CIGaussianBlur CIFilter
  3. Przypisywanie filtr do węzła efektów
  4. dodawania węzłów do węzła efektów (węzły potomne będą niewyraźne)

i przykładowy kod w 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

Jak mogę je odblokować? Czy po prostu usunę węzeł "effectsNode", czy też usunę wszystkie jego dzieci? –

+0

Ponadto, wiersz 'filter.setValue (blurAmount, forKey: kCIInputRadiusKey)' wyświetla komunikat o błędzie "Wysyłanie zmiennoprzecinkowej do parametru niekompatybilnego typu 'id'" **. Jeśli to w ogóle ma znaczenie, przekonwertowałem ten kod na cel-c. –

+0

@ ChristianKRider tutaj jest obj-c wersja tej instrukcji: '[filter setValue: [NSNumber numberWithFloat: 10.0] forKey: kCIInputRadiusKey];'. Aby odblokować sprite'y, możesz albo usunąć je z węzła efektów, a następnie dodać do sceny lub ustawić 'effectsNode.filter = nil;' – 0x141E

Powiązane problemy