我正在关注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;
}
当您运行应用程序时,它只显示太空飞船而没有任何模糊效果。
答案 0 :(得分:0)
我没有看到您在设置您创建的效果节点的filter
属性的任何位置,也没有看到您将shouldEnableEffects
属性设置为YES
的位置。
正如前面提到的文档所暗示的那样,如果您的效果节点要应用过滤器,那么这两个属性都需要一个有意义的值。
答案 1 :(得分:0)
看起来@“CIBoxBlur”过滤器不再存在,至少在iOS 7.0中是这样。你可以使用@“CIGaussianBlur”。您可以通过运行以下内容查看过滤器的完整列表:
NSArray* filters = [CIFilter filterNamesInCategories:nil];
for (NSString* filterName in filters)
{
NSLog(@"Filter: %@", filterName);
}
答案 2 :(得分:0)
我使用您的代码进行了以下更改,所有测试都很棒!
//switch this
lightingNode.position
//to this
light.position
//add this
lightingNode.shouldEnableEffects = YES;
//change
CIBoxBlur
//to
CIGaussianBlur