Я пытаюсь использовать SKEmitterNode для создания шейдера, вроде как в Pokemon, когда вы находитесь в пещере: http://www.serebii.net/pokearth/maps/johto-hgss/38-route31.png
Вот код, который у меня есть до сих пор:
NSString *burstPath =
[[NSBundle mainBundle] pathForResource:@"MyParticle" ofType:@"sks"];
SKNode *area = [[SKNode alloc] init];
SKSpriteNode *background = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(self.frame.size.width, self.frame.size.width)];
background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
SKEmitterNode *burstNode =
[NSKeyedUnarchiver unarchiveObjectWithFile:burstPath];
burstNode.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));
burstNode.particleBlendMode = SKBlendModeSubtract;
[area addChild:background];
[area addChild:burstNode];
[self addChild:area];
Вот SKEmitterNode: http://postimg.org/image/60zflqjzt/
У меня было две идеи. Первый заключался в создании прямоугольного узла SKSpriteNode и удалении узла SKEmitterNode из прямоугольного узла SKSpriteNode. Таким образом, у нас есть черный прямоугольник с «дырой» в центре, сквозь которую мы можем видеть.
Второй заключался в том, чтобы добавить прямоугольный узел SKSpriteNode и узел SKEmitter к другому узлу SKNode (области), затем установить режим частицBlendMode узла SKEmitterNode и, наконец, установить альфа-канал узла SKNode (область) в зависимости от цвета. Например, если цвет пикселя черный, альфа-значение этого пикселя будет равно 1,0, а другой пиксель белый, альфа-значение этого другого пикселя будет равно 0,0.
Этот вопрос является возможным дубликатом Как создать альфа-маска в iOS с использованием набора спрайтов в некотором роде, но, поскольку хорошего ответа не было дано, я предполагаю, что это не проблема.
Спасибо большое.