SKCropNode masking edge anti-aliasing

前端 未结 3 1366
旧巷少年郎
旧巷少年郎 2021-01-02 00:38

I created a circular mask and animate a sprite inside the mask by using sprite kit SKCropNode class. But the edge of the mask looks pixellated.

Is there a way to use

3条回答
  •  醉酒成梦
    2021-01-02 01:02

    If you want to mask any SKNode/SKSpriteNode with an anti-aliasing effect - you can use SKEffectNode instead of SKCropNode. It works with animated nodes as well. Here is an example:

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

提交回复
热议问题