在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