2

我有一个带有 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;
}

结果相同。

4

1 回答 1

0

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

self.shouldEnableEffects = YES;

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

于 2014-01-18T17:15:20.553 回答