2014-09-19 2 views
2

Je sais qu'il y a SKCropNode, mais il n'acceptera ou exclura entièrement les pixels que sur la base d'un seuil alpha de maskNode. Ce que j'ai déjà essayé est d'utiliser le SKEffectNode avec un filtre CIBlendWithAlphaMask, mais le résultat que je reçois est invisible et je ne serais pas sûr de la façon de déplacer le masque. Voici le code:Comment masquer alpha un SKSpriteNode?

SKSpriteNode* overlay = [SKSpriteNode spriteNodeWithImageNamed:@"Overlay.png"]; 
//... 
SKEffectNode* blendNode = [[SKEffectNode alloc] init]; 
blendNode.filter = [CIFilter filterWithName:@"CIBlendWithAlphaMask"]; 

UIImage* maskImage = [UIImage imageNamed:@"MaskImage.png"]; 
[blendNode.filter setValue:[maskImage CIImage] forKey:@"inputMaskImage"]; 

[blendNode addChild:overlay]; 
[self addChild:blendNode]; 

j'avais déjà trouvé la solution parfaite, en utilisant un SKLightNode pour éclairer la texture, puis se fondre dans le framebuffer en utilisant SKBlendModeAdd, mais pour une raison quelconque, il ne fonctionnera pas sur l'iPhone 5 (here's a related topic). Je suis au courant de this topic aussi, ce qui n'a pas aidé non plus.

Toute solution pour masquer correctement un SKSpriteNode serait grandement appréciée! Exécution d'iOS 8.

+0

CIImage était nul, il masque maintenant, mais je ne sais toujours pas comment déplacer le masque ... – Larry

+0

Avez-vous déjà compris? – nekonari

Répondre

1

L'utilisation d'un masque CIImage généré dynamiquement constitue l'astuce. Il peut être créé par un CIFilter, en utilisant le dégradé ou l'image dont vous avez besoin en tant que masque, et en définissant la propriété inputCenter sur la position souhaitée.

+1

Pouvez-vous partager un exemple de code? – DevAno1

Questions connexes