SpriteKit Swift сделает всю сцену темнее, а затем вернет ее обратно

Есть ли способ сделать всю сцену, включая все ее дочерние узлы (а не только цвет фона), более темным по цвету? Я ищу эффект, подобный этому коду:

node.color = SKColor.blackColor()
node.colorBlendFactor = 0.25

Приведенный выше код затемняет node более темный цвет, сохраняя при этом исходные цвета (за исключением того, что эти цвета просто более темные) и детализацию. Однако, насколько я могу судить, этот код не работает со сценами, он работает только с SKSpriteNode. Есть ли способ затемнить всю сцену? Ответом может быть какой-то фильтр, особый способ раскрасить сцену, а может быть, просто нет способа. Все помогает!

Спасибо


person Noah Covey    schedule 20.12.2015    source источник


Ответы (2)


Когда мне нужно сделать что-то похожее на то, о чем вы просите, я просто добавляю SKSpriteNode поверх всего остального, как показано ниже:

let dimPanel = SKSpriteNode(color: UIColor.blackColor(), size: self.size)
dimPanel.alpha = 0.75
dimPanel.zPosition = 100
dimPanel.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
self.addChild(dimPanel)

Просто убедитесь, что zPosition панели больше, чем все, что вы хотите сделать более тусклым.

Таким образом, вы также можете использовать SKAction.colorizeWithColor, чтобы изменить цвет панели на любой желаемый.

Чтобы добавить панель, а затем удалить ее, вы можете начать альфа-канал с 0, а затем выполнить:

dimPanel.runAction(SKAction.sequence([
    SKAction.fadeAlphaTo(0.75, duration: 3),
    SKAction.fadeOutWithDuration(3)
]))
person Trent Sartain    schedule 20.12.2015
comment
Спасибо. Это кажется довольно простым и эффективным способом решения проблемы. Думаю, я слишком много об этом подумал. Спасибо еще раз! - person Noah Covey; 21.12.2015

Ответом может быть какой-то фильтр ...

Действительно. Хотя ответ @TrentSartain довольно практичен, это не единственный способ. SKScene наследуется от SKEffectNode, поэтому вы можете примените фильтр Core Image (или цепочку фильтров) ко всей сцене, чтобы затемнить ее или добавить другие визуальные эффекты.

Попав в основные фильтры изображений, у вас есть всевозможные варианты затемнения - например, вы можете получить другой эффект от изменения параметров до CIExposureAdjust, чем от CIToneCurve. Или вы можете комбинировать несколько фильтров, чтобы ваша сцена (например) переходила в оттенки серого и размывалась при затемнении.

Примечание: нет SKActions для анимации фильтров Core Image, но вы можете изменять параметры объекта CIFilter с течением времени в вашей update функции или _ 8_ block.

person rickster    schedule 22.12.2015
comment
Спасибо за совет, но я думаю, что остановлюсь на более простом варианте. Это все, что мне сейчас нужно. Позже я буду помнить об основных фильтрах изображений, если мне когда-нибудь понадобится что-то более сложное. - person Noah Covey; 23.12.2015