2013-12-16 17 views
11

Utworzona okrągła maska ​​i animacja sprite'a wewnątrz maski przy użyciu zestawu sprite kit SKCropNode class. Ale krawędź maski wygląda pikselowana.Funkcja wygładzania krawędzi SKCropNode

Czy istnieje sposób na wygładzanie krawędzi za pomocą wygładzania?

+0

Czy możesz udostępnić kod, którego użyłeś do uzyskania maski? – ZeMoon

+0

jest wyświetlany w pikselach tylko na symulatorze lub urządzeniu? –

+1

Według specyfikacji, z pewnością będzie miał postrzępione krawędzie, ponieważ SKCropNode używa wartości boolowskiej (0 lub 1), a nie bajtu (np. 0 do 255). –

Odpowiedz

3

Z oficjalnych dokumentów:

Jeśli piksel w masce ma wartość alfa mniej niż 0,05, piksel obraz jest maskowane.

Tak więc, SKCropNode nie obsługuje wartości alfa na piksel. Albo rysuje piksele, albo nie. Jeśli alfa (jak używa antyaliasing) jest dla ciebie ważna, powinieneś rozważyć alternatywne trasy. Na przykład:

How to Mask an UIImageView

3

Jeśli chcesz zamaskować dowolny SKNode/SKSpriteNode z efektem anti-aliasing - można użyć SKEffectNode zamiast SKCropNode. Działa również z animowanymi węzłami. Oto przykład:

// 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]; 
Powiązane problemy