2014-01-18 6 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

Смежные вопросы