2014-10-15 2 views
9

Я хотел бы, чтобы размыть фон моей игры, когдаКак размыть все, кроме 2 узлов. Spritekit (Swift)

self.view?.scene?.paused = true 

Но кнопку и приостановленную метку (оба SKSpriteNode в) не должен быть нечеткими. все они имеют разные значения Z-индекса. Сцена приостанавливается, когда кнопка кнопки нажата и возобновляется, когда кнопка снова нажата.

Я не могу найти способ добиться этого в Свифт. Я нашел несколько предложений, которые используют SKEffectNode?

ответ

10

Основные этапы ...

  1. Создать SKEffectsNode
  2. Создать CIGaussianBlur CIFilter
  3. Назначение фильтра к узлу эффектов
  4. Добавить узлы к узлу эффектов (дочерние узлы будут помутнение)

и пример кода в 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

Как их разблокировать? Я просто удалю «effectNode», или я удалю все его дети? –

+0

Кроме того, строка 'filter.setValue (blurAmount, forKey: kCIInputRadiusKey)' вызывает ошибку, говорящую «Отправка float в параметр несовместимого типа« id »» **. Если это имеет значение вообще, я превратил этот код в цель-c. –

+0

@ChristianKRider - это версия obj-c этого оператора: '[filter setValue: [NSNumber numberWithFloat: 10.0] forKey: kCIInputRadiusKey];'. Чтобы развязать спрайты, вы можете удалить их из узла эффектов, а затем добавить их в сцену или установить 'effectsNode.filter = nil;' – 0x141E

Смежные вопросы