因此,在我的项目中,我有一个 SKEffectNode,用于在我的一些 spriteNode 周围提供发光效果。我使用 spriteNode (blurNode) 来获取障碍物的颜色,然后将其提供给effectNode。这工作得很好。
let blurNode = SKSpriteNode(imageNamed: "neonLine.png")
blurNode.color = obstacle.color
blurNode.colorBlendFactor = 1.0
blurNode.size = CGSize(width: obstacle.size.width + 30, height: obstacle.size.height + 30)
let effectNode = SKEffectNode()
effectNode.shouldRasterize = true
obstacle.addChild(effectNode)
effectNode.addChild(blurNode)
effectNode.filter = CIFilter(name: "CIGaussianBlur", withInputParameters: ["inputRadius":30])
effectNode.alpha = 1.0
我的问题出现在这里。
let colorFadegreen = SKAction.sequence([SKAction.colorize(with: UIColor(red: 0, green: 0.6471, blue: 0.3569, alpha: 1.0), colorBlendFactor: 1.0, duration: 3)])
obstacle.removeAllActions()
obstacle.run(colorFadegreen)
blurNode.removeAllActions()
blurNode.run(colorFadegreen)
我想做的是让障碍物周围的“发光”随着障碍物改变颜色。这正是所发生的情况;然而,当我这样做时,我的帧速率下降到 30fps。
所以,我的问题是有人知道如何提高这项任务的性能吗?或者我可以用另一种方式来做这件事吗?
我想到的想法之一是在 Photoshop 中手动模糊“neonLine.png”,然后将其添加到模糊节点,如下所示
让blurNode = SKSpriteNode(imageNamed: "bluredNeonLine.png")
。唯一的问题是我永远无法正确地模糊它,它看起来总是不对劲。
任何帮助将不胜感激。谢谢!
编辑:
以下是我的项目中发光的一些照片:
这是发光和改变颜色的线条:
最佳答案
有关发光的性能问题的三个答案:
- 使用预渲染的发光,按照您在问题中提到的,在 Photoshop 或类似的位图编辑器中完成,导出为具有不透明度的位图并用作 SKSpriteNode 纹理,可能使用附加混合以获得最佳效果,并使用色偏味道。
- 烘焙 SKEffectNode 的纹理,通过将其制作成纹理,然后将其加载到 SKSpriteNode 中,在 SpriteKit 中创建理想的发光效果,如以下示例所示:https://stackoverflow.com/a/40137270/2109038
- 栅格化 SKEffectNode 的结果,然后希望对色偏的更改不会导致重新渲染。这在一个精彩的扩展中显示,这里:https://stackoverflow.com/a/40362874/2109038
在所有情况下,你最好渲染一个随你喜欢而淡出的白光,然后对其应用颜色混合更改,因为 SpriteKit 内置了此功能,并且在我进行的一些测试中它的性能相当不错完毕。这称为着色:
您可以更改混合量并为其设置动画:https://developer.apple.com/reference/spritekit/skspritenode/1519780-colorblendfactor
颜色与纹理混合:https://developer.apple.com/reference/spritekit/skspritenode/1519639-color
关于swift - 如何提高SKEffectNode性能(Swift)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613578/