2013-12-16 8 views
11

Я создал круговую маску и анимировал спрайт внутри маски, используя класс спрайтов SKCropNode. Но край маски выглядит пиксельно.SKCropNode маскирование края сглаживания

Есть ли способ использовать сглаживание для сглаживания краев?

+0

Вы могли бы поделиться кодом, которым пользовались для достижения маски? – ZeMoon

+0

действительно отображается в пикселях только на симуляторе или устройстве тоже ?? –

+1

Согласно спецификациям, у него наверняка будут зубчатые края, так как SKCropNode использует значение boolean (0 или 1), а не байтовое значение (скажем, от 0 до 255). –

ответ

3

Из официальных документов:

Если пиксель в маске имеет альфа-значение менее 0,05, пиксель изображения маскируется.

Таким образом, SKCropNode не поддерживает значения альфа-пикселей. Он либо рисует пиксели, либо нет. Если для вас важна альфа (как используется сглаживание), вы должны рассмотреть альтернативные маршруты. Например:

How to Mask an UIImageView

3

Если вы хотите, чтобы замаскировать SKNode/SKSpriteNode с эффектом сглаживания - вы можете использовать SKEffectNode вместо SKCropNode. Он также работает с анимированными узлами. Вот пример:

// 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]; 

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

  • Нет связанных вопросов^_^