是否可以在SKEmitterNode上应用过滤器?

时间:2014-01-18 16:13:01

标签: ios iphone sprite-kit skemitternode

我有一个带有SKEmitterNode的场景,直接添加到场景时可以正常工作。

但是,我想在场景中添加一个SKEffectNode来模糊发射器粒子。

这就是它的样子。

@implementation MyScene

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        /* Setup your scene here */

        self.backgroundColor = [SKColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];

        SKEffectNode *blurNode = [[SKEffectNode alloc] init];

        CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [blurFilter setValue:@10.0 forKey:kCIInputRadiusKey];
        blurNode.filter = blurFilter;
        blurNode.shouldEnableEffects = YES;

        NSString *bokehPath = [[NSBundle mainBundle] pathForResource:@"Bokeh" ofType:@"sks"];
        SKEmitterNode *bokeh = [NSKeyedUnarchiver unarchiveObjectWithFile:bokehPath];
        [blurNode addChild:bokeh];

        [self addChild:blurNode];
    }
    return self;
}

这会导致黑屏。

由于SKScene也是SKEffectNode的子类,我也尝试直接向场景添加CIFilter。

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        /* Setup your scene here */

        self.backgroundColor = [SKColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];

        CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [blurFilter setValue:@10.0 forKey:kCIInputRadiusKey];

        NSString *bokehPath = [[NSBundle mainBundle] pathForResource:@"Bokeh" ofType:@"sks"];
        SKEmitterNode *bokeh = [NSKeyedUnarchiver unarchiveObjectWithFile:bokehPath];
        [self addChild:bokeh];

        self.filter = blurFilter;
    }

    return self;
}

同样的结果。

1 个答案:

答案 0 :(得分:0)

如果您确实直接将滤镜应用于场景,则可以实现此效果。将以下内容添加到第二个代码中:

self.shouldEnableEffects = YES;

如果您仍然看到空白屏幕,请尝试在黑色背景上使用亮色颗粒而不是白色颗粒来获得此效果。但预计帧率会大幅下降。最好在粒子编辑器中为粒子本身使用模糊纹理。