Вот как я реализовал динамическое решение, которое немного рентгеновское (я думаю, что оно на самом деле ближе к инверсии изображения).Я не мог предварительно обработать изображения, потому что мне нужно было создать странное изображение из текущего состояния игрового слоя.
Все это было сделано с использованием Cocos2d:
Я создал два слоя для моей сцены.Один слой является основным игровым слоем, другой слой является слоем эффектов.Основной игровой слой разделен на подклассы от CCLayer.Слой эффекта подклассируется из CCColorLayer.
Слой эффекта находится в более высоком z-порядке, чем основной игровой слой, то есть слой эффекта находится над игровым слоем.
Затем я использовал два разных режима смешивания, чтобы изменить внешний вид с нормального на рентгеновский.
Код-let
@implementation EffectLayer
- (id) init
{
self = [super init];
if (self != nil)
{
self.isTouchEnabled = YES;
self.color = ccc3(255, 255, 255);
self.opacity = 0.8;
[self goNormal];
}
return self;
}
- (void) goWeird
{
[self setBlendFunc:(ccBlendFunc){GL_ONE_MINUS_DST_COLOR, GL_ZERO}];
}
- (void) goNormal
{
[self setBlendFunc:(ccBlendFunc){CC_BLEND_SRC, CC_BLEND_DST}];
}