SKCropNode маскирует края сглаживания

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

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

Ответ 1

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

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

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

Как маскировать UIImageView

Ответ 2

Если вы хотите скрыть любой 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];