在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
答案 0 :(得分:0)
经过数小时的调试后,我意识到iOS7不会像iOS8一样呈现SKEffectNode
。
在iOS7中,将SKEffectNode添加到一堆SKSpriteNode
图层将不自动将其置于最前层(SKSpriteNode就是这种情况)。
所以我只需要添加一行:
grayNode.zPosition = 10 //Or any number > 1