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 и ниже...