【问题标题】:Apply CIFilter to SKEffectNode on iOS7在 iOS7 上将 CIFilter 应用于 SKEffectNode
【发布时间】:2015-02-18 22:32:09
【问题描述】:

在 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 上的运行情况如何,通过设置部署目标还是在早期版本的 Xcode 上运行?
  • 我在 iOS 7.1 上的 iPhone 4S 和 7.1 上的模拟器上进行了测试(我不得不从 Xcode 下载 900Mo 的模拟器,因为它只有 iOS8.1)。部署目标设置为 iOS7.1。顺便说一句,我先为 iOS8 创建了项目,然后决定也支持 iOS7。
  • 您是否在控制台窗口中看到错误?
  • 完全没有错误,游戏运行完美,一切似乎都被隐藏了。我在 iOS8 和 iOS7 中有完全相同的代码。用额外的“调试”更新了帖子
  • 我收到以下错误“[CIImage initWithTexture:size:flipped:colorSpace] 需要整数大小!”当我在运行 iOS 7 的 4S sim 上运行时,节点被隐藏了。它适用于 iOS 8。

标签: ios swift sprite-kit cifilter


【解决方案1】:

经过数小时的调试,我意识到 iOS7 渲染 SKEffectNode 的方式与 iOS8 不同。

在 iOS7 中,将 SKEffectNode 添加到一堆SKSpriteNode 层将不会自动将其放到最前面的层(SKSpriteNode 就是这种情况)。

所以我只需要添加一行:

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

【讨论】:

  • 在您的视图控制器中设置skView.ignoresSiblingOrder = false 也应该可以工作。
  • 确实!谢谢你的时间:-)
猜你喜欢
  • 2015-10-03
  • 2015-11-23
  • 2015-06-08
  • 2012-03-30
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2014-03-28
  • 2018-02-17
相关资源
最近更新 更多