2015-12-15 2 views
0

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

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

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

ответ

0

Мы обнаружили еще одно «хакерское» решение этой проблемы. В принципе, вместо того, чтобы использовать 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 и ниже ...

Смежные вопросы