4

我正在尝试为游戏中会造成伤害的角色或物体添加光晕。我想为游戏中的“坏”事物(即尖峰、守卫等)发出红光。我正在使用以下代码,但即使将 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
}
4

0 回答 0