Как мне альфа-маскировать 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
собственности на позицию, которую вы хотите.