SKEffectNode должен ли Rasterize ломаться в iOS 9.2?

Я помню, как с момента появления SpriteKit он никогда не поддерживал SKCropNode внутри другого SKCropNode, По этой причине я решил использовать SKEffectNode вместе с shouldRasterize свойство в дочернем узле, которое, кажется, работает нормально.... до сих пор.

Начиная с iOS 9.2 спрайты внутри SKEffectNode использование этого свойства сейчас либо не показывает, либо показывает просто белую текстуру. Как SKCropNode внутри SKCropNode до сих пор не работает у меня нет вариантов.

Кто-нибудь знает обходной путь для этого? Или я должен просто подать радар в Apple?

1 ответ

Мы нашли другой "хакерский" обходной путь для этой проблемы. По сути, вместо использования SKEffectNode растеризовать его вы можете использовать - (nullable SKTexture *)textureFromNode:(SKNode *)node от SKView,

Итак, ранее это было вроде:

SKEffectNode *rasterizedSprite = [SKEffectNode node];
SKSpriteNode *mask = [SKSpriteNode spriteNodeWithImageNamed:@"maskImage"];
SKCropNode *cropNode = [SKCropNode node];
[cropNode setMaskNode: mask];
[cropNode addChild: spriteToMask];

[rasterizedSprite addChild:cropNode];
rasterizedSprite.shouldRasterize = YES;

[self addChild:rasterizedSprite];

Теперь это как:

SKSpriteNode *mask = [SKSpriteNode spriteNodeWithImageNamed:@"maskSprite"];

SKCropNode *cropNode = [SKCropNode node];
[cropNode setMaskNode: mask];
[cropNode addChild: spriteToMask];

SKView *view = [[SKView alloc]init];

SKSpriteNode *rasterizedSprite = [SKSpriteNode spriteNodeWithTexture:[view textureFromNode:cropNode]];

[self addChild:rasterizedSprite];

Этот обходной путь может вызвать проблемы с iOS8 и ниже...

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