gpt4 book ai didi

ios - 如何将可动画化的 CIFilter 添加到我的 SKScene

转载 作者:行者123 更新时间:2023-11-30 12:16:18 28 4
gpt4 key购买 nike

我真的很想在我的 SKScene 中添加一个 CIFilter。事实上,我可以很容易地做到这一点,只需将以下内容放入我的 GameScene 类的 didMove(to view: SKView) 函数中即可:

let grayscaleFilter = CIFilter(name: "CIColorControls", withInputParameters: ["inputBrightness" : 0.0, "inputContrast" : 1.1, "inputSaturation" : 0.0])!
grayscaleFilter.name = "grayscale"
self.filter = grayscaleFilter
self.shouldEnableEffects = true

现在我的问题是尝试对其进行动画处理,据我所知,有效地对 CIFilters 进行动画处理的唯一方法是使用 Core Animation。我知道核心动画只能添加到 CALayer,所以我在我的 GameScene 类的 didMove(to view: SKView) 函数中尝试了以下代码:

let grayscaleFilter = CIFilter(name: "CIColorControls", withInputParameters: ["inputBrightness" : 0.0, "inputContrast" : 1.1, "inputSaturation" : 0.0])!
grayscaleFilter.name = "grayscale"
let grayscaleAnimation = CABasicAnimation(keyPath: "filters.grayscale.inputSaturation")
grayscaleAnimation.fromValue = 0.0
grayscaleAnimation.toValue = 1.0
grayscaleAnimation.duration = 5
view.isMultipleTouchEnabled = false
view.layer.filters?.append(grayscaleFilter)
view.layer.add(grayscaleAnimation, forKey: "grayscaleAnimation")

我根本没有得到任何结果。没有动画。根本就没有滤镜。有谁知道一种有效的方法来做到这一点,并且有人可以解释为什么我当前的方法不起作用。感谢任何帮助,提前致谢。

最佳答案

这是我知道的一种有效方法,仅使用 SpriteKit(无核心动画)。首先创建过滤器,并将其存储:

let filter = CIFilter(name: "CIExposureAdjust", withInputParameters: ["inputEV": 0])
self.filter = filter // store it
scene.filter = filter // so the whole scene will be filtered
scene.shouldEnableEffects = true

然后创建一个 SKAction 来更改过滤器的属性。

let duration = 1.0
let a = SKAction.customAction(withDuration: duration) { (node, elapsed) in
let percent = elapsed / CGFloat(duration)
// Animate inputEV from 0 to 2.5
self.filter.setValue(percent * 2.5, forKey: "inputEV")
}
a.timingMode = .easeIn
scene.run(a)

如果你不想过滤整个场景,你可以以同样的方式使用 SKEffectNode。但您不是将滤镜分配给场景,而是将其分配给 SKEffectNode。但是,在更新过滤器的属性后,您需要在 SKAction block 中添加此行:

self.myEffectNode.shouldEnableEffects = true

如果 SKAction block 中没有该行,动画将无法工作。我认为这是一个错误。如果您要在整个场景上设置滤镜,则不必执行此操作。

关于ios - 如何将可动画化的 CIFilter 添加到我的 SKScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402057/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com