0

我正在关注Apple的SpriteKit文档,现在我正在尝试使用SKEffectNode,但我的问题是效果不会被应用!这是我的代码:

SKEffectNode *lightingNode = [[SKEffectNode alloc] init];
SKTexture *texture = [SKTexture textureWithImage:[UIImage imageNamed:@"Spaceship"]];
SKSpriteNode *light = [SKSpriteNode spriteNodeWithTexture:texture];
self.filter = [self blurFilter];
lightingNode.position = self.view.center;
lightingNode.blendMode = SKBlendModeAdd;
[lightingNode addChild: light];
[self addChild:lightingNode];

//applying blur 

- (CIFilter *)blurFilter
{
    CIFilter *filter = [CIFilter filterWithName:@"CIBoxBlur"]; // 3
    [filter setDefaults];
    [filter setValue:[NSNumber numberWithFloat:20] forKey:@"inputRadius"];
    return filter;
}

当您运行该应用程序时,它只会显示宇宙飞船而没有任何模糊效果。

4

3 回答 3

0

我没有看到您在任何地方设置filter您创建的效果节点的属性,也没有看到您将其shouldEnableEffects属性设置为YES.

正如前面链接的文档所暗示的,如果您的效果节点要应用过滤器,那么这两个属性都需要一个有意义的值。

于 2013-12-30T22:25:08.563 回答
0

看起来 @"CIBoxBlur" 过滤器不再存在,至少在 iOS 7.0 中。你可以使用@"CIGaussianBlur"。您可以通过运行查看过滤器的完整列表:

    NSArray* filters = [CIFilter filterNamesInCategories:nil];
    for (NSString* filterName in filters)
    {
        NSLog(@"Filter: %@", filterName);
    }
于 2014-01-05T02:33:07.387 回答
0

我使用您的代码进行了以下更改,并且所有测试都很好!

//switch this  
lightingNode.position
//to this
light.position 
//add this 
lightingNode.shouldEnableEffects = YES;
//change 
CIBoxBlur
//to
CIGaussianBlur
于 2014-02-06T10:21:40.877 回答