Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Ссылка платформы SpriteKit ссылка класса SKEffectNode

Опции
Развертывание Target:

На этой странице
Язык:

SKEffectNode

Наследование


Оператор импорта


Swift

import SpriteKit

Objective C

@import SpriteKit;

Доступность


Доступный в iOS 7.0 и позже.

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

Каждый раз, когда новый кадр представляется с помощью узла эффекта, узел эффекта выполняет эти шаги:

  1. Узел эффекта вовлекает свои дочерние элементы в частный кадровый буфер.

  2. Это применяет Базовый Эффект изображений к частному кадровому буферу. Этот этап является дополнительным; посмотрите filter и shouldEnableEffects свойства.

  3. Это смешивает содержание своего частного кадрового буфера в кадровый буфер его родителя, с помощью одного из стандартных режимов смешивания спрайта.

  4. Это отбрасывает свой частный кадровый буфер. Этот шаг является дополнительным; посмотрите shouldRasterize свойство.

Пример: применение специального эффекта

Одно возможное применение для узлов эффекта должно применить специальные эффекты к дочерним элементам узла, как показано на рисунке 1. В этом примере дочерние элементы узла эффекта являются двумя спрайтами, предоставляющими информацию освещения. Узел эффекта накапливает эффекты этих световых сигналов, применяет фильтр размытия для смягчения получающегося изображения, и затем использует умножить режим смешивания для применения этого освещения к стенной текстуре.

Узлы рисунка 1Effect, применяющие специальные эффекты к дочерним элементам узла image: ../Art/ss5-effect_2x.png

Вот то, как сцена генерирует этот эффект освещения:

  1. Сцена имеет два дочерних элемента. Первым является текстурированный спрайт, представляющий землю. Вторым является узел эффекта для применения освещения.

    • self.lightingNode = [[SKEffectNode alloc] init];
  2. Дочерние элементы узла эффекта являются представленным использованием узлов спрайта аддитивного режима смешивания.

    • SKSpriteNode *light = [SKSpriteNode spriteNodeWithTexture:lightTexture];
    • light.blendMode = SKBlendModeAdd;
    • ...
    • [self.lightingNode addChild: light];
  3. Узел эффекта включает эффект фильтра смягчить освещение.

    • - (CIFilter *)blurFilter { CIFilter *filter = [CIFilter filterWithName:@"CIBoxBlur"]; // 3 [filter setDefaults]; [filter setValue:[NSNumber numberWithFloat:20] forKey:@"inputRadius"]; return filter; }
    • self.lightingNode.filter = [self blurFilter];

    При указании Базового фильтра Изображения это должен быть фильтр, берущий единственное входное изображение и производящий единственное выходное изображение.

  4. Узел эффекта использует режим смешивания умножения для применения его эффекта освещения к кадровому буферу сцены.

    • self.lightingNode.blendMode = SKBlendModeMultiply;

Сцены являются узлами эффекта

SKScene класс является подклассом SKEffectNode. Это означает, что любая сцена может применить фильтр к своему содержанию. Несмотря на то, что применение фильтров может быть очень дорогим — не, все фильтры хорошо разработаны для интерактивных эффектов — экспериментирование может помочь Вам найти некоторые интересные способы использовать их.

Кэширование может улучшить производительность статического содержания

Узел эффекта обычно отбрасывает свой частный кадровый буфер после того, как рендеринг будет завершен. Рендеринг содержания необходим, потому что это обычно изменяет каждый кадр. Однако, если содержание статично, это является ненужным. Могло бы иметь больше смысла сохранять представленный кадровый буфер вместо того, чтобы отбросить его. Если содержание узла эффекта статично, установите узел shouldRasterize свойство к YEStrue. Установка этого свойства вызывает следующие изменения в поведении:

  • Кадровый буфер не отбрасывается в конце растеризации. Это также означает, что больше памяти используется узлом эффекта, и рендеринг может взять немного дольше.

  • Когда новый кадр представляется, кадровый буфер представляется, только если изменилось содержание потомков узла эффекта.

  • Если узел эффекта имеет Базовый фильтр Изображения, изменения в его свойствах больше автоматически обновляют кадровый буфер. Можно вынудить его быть обновленным путем установки shouldRasterize свойство к NOfalse.

Можно использовать узлы эффекта для кэширования статического содержания, даже когда Вы не применяете фильтр к представленному изображению. Когда содержание поддерева является статичным и дорогим для рендеринга, этот метод может быть полезным.

  • shouldEnableEffects Свойство

    Булево значение, определяющее, применяет ли узел эффекта фильтр к своим дочерним элементам, поскольку они привлечены.

    Объявление

    Swift

    var shouldEnableEffects: Bool

    Objective C

    @property(nonatomic) BOOL shouldEnableEffects

    Обсуждение

    Если значение этого свойства YEStrue, узел эффекта применяет фильтр и смешивает результаты. Если значение NOfalse, узел эффекта проигнорирован, и его дочерние элементы обычно представляются. Значение по умолчанию NOfalse.

    Оператор импорта

    Objective C

    @import SpriteKit;

    Swift

    import SpriteKit

    Доступность

    Доступный в iOS 7.0 и позже.

  • filter Свойство

    Базовое Изображение фильтрует для применения.

    Объявление

    Swift

    var filter: CIFilter?

    Objective C

    @property(nonatomic, retain) CIFilter *filter

    Обсуждение

    Базовый фильтр Изображения должен иметь сингл inputImage параметр и производит сингл outputImage параметр. Значение по умолчанию nil. Если значение nil и узел эффекта включен, никакая фильтрация не имеет место. Однако его дочерние элементы все еще представляются в отдельной передаче и смешиваются к кадровому буферу родителя.

    Оператор импорта

    Objective C

    @import SpriteKit;

    Swift

    import SpriteKit

    Доступность

    Доступный в iOS 7.0 и позже.

    См. также

    shouldEnableEffects
    blendMode

  • shouldCenterFilter Свойство

    Булево значение, определяющее, устанавливает ли узел эффекта автоматически центр изображения фильтра.

    Объявление

    Swift

    var shouldCenterFilter: Bool

    Objective C

    @property(nonatomic) BOOL shouldCenterFilter

    Обсуждение

    Если значение этого свойства YEStrue и фильтр имеет inputCenter параметр, узел эффекта автоматически устанавливает входной центр фильтра в источник узла эффекта. Значение по умолчанию YEStrue.

    Оператор импорта

    Objective C

    @import SpriteKit;

    Swift

    import SpriteKit

    Доступность

    Доступный в iOS 7.0 и позже.

  • blendMode Свойство

    Режим смешивания раньше вовлекал отфильтрованное изображение в кадровый буфер родителя.

    Объявление

    Swift

    var blendMode: SKBlendMode

    Objective C

    @property(nonatomic) SKBlendMode blendMode

    Обсуждение

    Значение по умолчанию SKBlendModeAlpha.

    Оператор импорта

    Objective C

    @import SpriteKit;

    Swift

    import SpriteKit

    Доступность

    Доступный в iOS 7.0 и позже.

  • shader Свойство

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

    Объявление

    Swift

    var shader: SKShader?

    Objective C

    @property(nonatomic, retain) SKShader *shader

    Обсуждение

    Значение по умолчанию nil, подразумевать, что выполняется поведение смешивания значения по умолчанию. Если программа построения теней указана, ее вызывают, когда растеризированное изображение смешивается в кадровый буфер родителя.

    Оператор импорта

    Objective C

    @import SpriteKit;

    Swift

    import SpriteKit

    Доступность

    Доступный в iOS 8.0 и позже.

  • shouldRasterize Свойство

    Булево значение, указывающее, должны ли кэшироваться результаты рендеринга дочерних узлов.

    Объявление

    Swift

    var shouldRasterize: Bool

    Objective C

    @property(nonatomic) BOOL shouldRasterize

    Обсуждение

    Если значение этого свойства YEStrue, узел эффекта кэширует отфильтрованное изображение для использования в будущих кадрах. Если значение NOfalse, тогда Набор Sprite отбрасывает представленное изображение и перерисовывает его с нуля в следующий раз, когда узел представляется. Значение по умолчанию NOfalse. Кэширование представленного изображения использует больше памяти и может занять больше времени для рендеринга. Однако, если потомки узла эффекта редко изменяются, кэширование может улучшить производительность.

    Когда кэширование включено, изменения в дочерних триггерных обновлениях узла эффекта до кэшируемого изображения в следующем кадре анимации. Однако изменение свойств фильтра не делает.

    Оператор импорта

    Objective C

    @import SpriteKit;

    Swift

    import SpriteKit

    Доступность

    Доступный в iOS 7.0 и позже.