2013-12-16 20 views
11

Ho creato una maschera circolare e animato uno sprite all'interno della maschera utilizzando la classe SKCropNode del kit sprite. Ma il bordo della maschera appare pixellato.SKCropNode anti-aliasing bordo mascheratura

C'è un modo per utilizzare l'anti-aliasing per smussare i bordi?

+0

potresti condividere il codice che hai utilizzato per ottenere la maschera? – ZeMoon

+0

appare pixelato solo sul simulatore o sul dispositivo ?? –

+1

In base alle specifiche, avrà sicuramente bordi frastagliati, poiché SKCropNode utilizza un valore alfa booleano (0 o 1), non un valore di byte (per esempio, da 0 a 255). –

risposta

3

Dalle documentazione ufficiale:

Se il pixel nella maschera ha un valore alfa inferiore a 0,05, il pixel dell'immagine viene nascosto.

Quindi, SKCropNode non supporta i valori di pixel alfa. Disegna i pixel o no. Se alfa (come viene utilizzato dall'anti-aliasing) è importante per te, dovresti considerare percorsi alternativi. Per esempio:

How to Mask an UIImageView

3

Se si desidera mascherare qualsiasi SKNode/SKSpriteNode con un effetto anti-aliasing - è possibile utilizzare al posto di SKEffectNode SKCropNode. Funziona anche con i nodi animati. Ecco un esempio:

// Set up your node 
SKNode *nodeToMask = [SKNode node]; 
// ... 

// Set up the mask node 
SKEffectNode *maskNode = [SKEffectNode node]; 

// Create a filter 
CIImage *maskImage = [[CIImage alloc] initWithCGImage:[UIImage imageNamed:@"your_mask_image"].CGImage]; 
CIFilter *maskFilter = [CIFilter filterWithName:@"CISourceInCompositing" 
            keysAndValues:@"inputBackgroundImage", maskImage, nil]; 
// Set the filter 
maskNode.filter = maskFilter; 

// Add childs 
[maskNode addChild:nodeToMask]; 
[scene addChild:maskNode]; 
Problemi correlati