在Swift中使用SpriteKit,我的GameScene(SKScene)中包含以下代码:

//Init function
let self.itemsLayer = SKNode()

let grayNode = SKEffectNode()
let grayFilter = CIFilter(name: "CIPhotoEffectNoir")
grayFilter.setDefaults()
grayNode.filter = grayFilter
grayNode.addChild(self.itemsLayer)

self.addChild(grayNode)

应该将我显示的项目渲染为灰色的itemsLayer(在代码稍后,我将一些带有纹理/图像的SKSpriteNode添加到itemsLayer中)。

在iOS8上,它可以完美运行:我可以看到所有项目均为灰色。

但是在iOS7上,不会显示SKSpriteNodes(我在itemsLayer上的项目)(好像是隐藏的)。

根据文档和filterNamesInCategory("CICategoryColorEffect")的规定,iOS7中确实存在CIPhotoEffectNoir。

编辑:当我注释过滤器行时,我的itemsLayer仍处于隐藏状态。当我将let grayNode转换为SKNode时,它可以正常工作(但不会产生任何效果)。问题似乎来自grayNode是SKEffectNode

最佳答案

经过数小时的调试,我意识到iOS7不会像iOS8那样呈现SKEffectNode

在iOS7中,将SKEffectNode添加到一堆SKSpriteNode图层中将是而不是,它会自动将其放置在最顶层(SKSpriteNode就是这种情况)。

所以我只需要添加以下行:

grayNode.zPosition = 10 //Or any number > 1

10-08 07:23