我有一个带有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;
}
结果相同。
最佳答案
如果确实将滤镜直接应用到场景,则有可能实现这种效果。将以下内容添加到第二个代码中:
self.shouldEnableEffects = YES;
如果仍然看到黑屏,请尝试在黑色背景上使用亮色粒子,而不要在白色背景上使用此效果。但是希望帧率会大大下降。在“粒子编辑器”中为粒子本身使用模糊的纹理可能会更好。
关于ios - 是否可以在SKEmitterNode上应用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206559/