Как мне альфа-маскировать SKSpriteNode?

Я знаю, что есть SKCropNode, но он будет только полностью включать или исключать пиксели на основе альфа-порога maskNode, Я уже пробовал использовать SKEffectNode с CIBlendWithAlphaMask фильтр, но результат, который я получаю, невидим, и я также не был бы уверен, как перемещать маску вокруг. Вот код:

SKSpriteNode* overlay = [SKSpriteNode spriteNodeWithImageNamed:@"Overlay.png"];
//...
SKEffectNode* blendNode = [[SKEffectNode alloc] init];
blendNode.filter = [CIFilter filterWithName:@"CIBlendWithAlphaMask"];

UIImage* maskImage = [UIImage imageNamed:@"MaskImage.png"];
[blendNode.filter setValue:[maskImage CIImage] forKey:@"inputMaskImage"];

[blendNode addChild:overlay];
[self addChild:blendNode];

Я уже придумал идеальное решение, используя SKLightNode осветить текстуру, а затем смешать ее в кадровый буфер, используя SKBlendModeAdd, но по какой-то причине он не будет работать на iPhone 5 ( вот связанная тема). Мне тоже известна эта тема, которая тоже не помогла.

Любое решение для правильной альфа-маски SKSpriteNode будет принята с благодарностью! Работает iOS 8.

1 ответ

Использование динамически генерируемого CIImage как маска делает свое дело. Он может быть создан CIFilter, используя любой градиент или изображение, которое вам нужно, в качестве маски, и установив inputCenter собственности на позицию, которую вы хотите.

Другие вопросы по тегам