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