【问题标题】:Having issue with SKEffectNodeSKEffectNode 有问题
【发布时间】:2013-12-30 16:15:28
【问题描述】:

我正在关注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;
}

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

【问题讨论】:

    标签: ios iphone objective-c sprite-kit skeffectnode


    【解决方案1】:

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

        NSArray* filters = [CIFilter filterNamesInCategories:nil];
        for (NSString* filterName in filters)
        {
            NSLog(@"Filter: %@", filterName);
        }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,我修改了lightingNode.filter = [self blurFilter];并添加了shouldEnableEffects,但仍然没有任何反应!
      • 嗯。我也没有看到在lightingNode 的坐标空间中定位light 的任何东西。可能就是这样。
      【解决方案3】:

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

      //switch this  
      lightingNode.position
      //to this
      light.position 
      //add this 
      lightingNode.shouldEnableEffects = YES;
      //change 
      CIBoxBlur
      //to
      CIGaussianBlur
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 1970-01-01
        相关资源
        最近更新 更多