使用shouldRasterize = true的CIFilter(名称:“CIGaussianBlur”)的SKEffectNode性能问题

时间:2016-05-29 15:28:28

标签: ios swift performance sprite-kit skeffectnode

我正在尝试为游戏中导致损坏的角色或物体添加光晕。我希望游戏中的“坏”事物发出红光,即尖峰,警卫等。我使用下面的代码,但即使将rasterize设置为true,性能也非常糟糕。当我添加效果时,性能从60fps快速下降到~30fps。发光效果需要在不同形状的精灵上,即。圆形,三角形,矩形,人等。我对其他方法持开放态度,虽然下面的代码给了我想要的确切视觉效果。如果我可以获得要执行的代码,我想在“好”的对象上发出绿光。

我还通过仅向左侧和右侧添加1.5个场景的节点来减少“坏”SKNode的数量。这种变化似乎没有帮助。问题似乎是当我真正来到特别沉重的SKNodes和SKNodes / SKSpriteNodes时,添加了效果。

glowAtlas = SKTextureAtlas(named: "GlowTextures")

// create a glowing effect
func getGlow(imageName: String, imageSize: CGSize, glowColor: SKColor) -> SKEffectNode {

 let glow = SKSpriteNode(imageNamed: imageName)

let texture = glowAtlas.textureNamed(imageName)
let glow = SKSpriteNode(texture: texture)

...

 glow.size = imageSize
 glow.color = glowColor
 glow.colorBlendFactor = 1.0

 // Create an effects node with a gaussian blur filter
 let effectsNode = SKEffectNode()
 effectsNode.shouldRasterize = true
 effectsNode.shouldEnableEffects = true

 let filter = CIFilter(name: "CIGaussianBlur")
 // Set the blur amount. Adjust this to achieve the desired effect
 let blurAmount = 5.0
 filter!.setValue(blurAmount, forKey: kCIInputRadiusKey)

 effectsNode.filter = filter
 effectsNode.blendMode = .Alpha
 effectsNode.addChild(glow)

 return effectsNode
}

0 个答案:

没有答案