2014-01-18 23 views
2

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

同樣的結果。

回答

0

如果您確實將過濾器直接應用於場景,則可以實現此效果。下面添加到你的第二個代碼:

self.shouldEnableEffects = YES; 

如果你仍然可以看到一個空白的屏幕,嘗試在黑色背景上,而不是你的白一個這種效果使用鮮豔的顆粒。但預計幀率會大幅下降。在粒子編輯器中對粒子本身使用模糊的紋理可能會更好。

+0

哦!是啊!謝謝 :) – Abhinit

相關問題