1
我有以下代码,我创建了一个显示动画GIF的精灵节点。我想创建另一个函数,在调用时会使GIF变暗。我仍然可以观看动画,但内容明显更暗。我不知道如何解决这个问题。我是否应该逐个加深用于创建动画的每个纹理或框架?如果是这样,首先我如何变暗纹理或框架?如何变暗精灵节点的纹理
// Extract frames and duration
guard let imageData = try? Data(contentsOf: url as URL) else {
return
}
let source = CGImageSourceCreateWithData(imageData as CFData, nil)
var images = [CGImage]()
let count = CGImageSourceGetCount(source!)
var delays = [Int]()
// Fill arrays
for i in 0..<count {
// Add image
if let image = CGImageSourceCreateImageAtIndex(source!, i, nil) {
images.append(image)
}
// At it's delay in cs
let delaySeconds = UIImage.delayForImageAtIndex(Int(i),
source: source)
delays.append(Int(delaySeconds * 1000.0)) // Seconds to ms
}
// Calculate full duration
let duration: Int = {
var sum = 0
for val: Int in delays {
sum += val
}
return sum
}()
// Get frames
let gcd = SKScene.gcdForArray(delays)
var frames = [SKTexture]()
var frame: SKTexture
var frameCount: Int
for i in 0..<count {
frame = SKTexture(cgImage: images[Int(i)])
frameCount = Int(delays[Int(i)]/gcd)
for _ in 0..<frameCount {
frames.append(frame)
}
}
let gifNode = SKSpriteNode.init(texture: frames[0])
gifNode.position = CGPoint(x: skScene.size.width/2.0, y: skScene.size.height/2.0)
gifNode.name = "content"
// Add animation
let gifAnimation = SKAction.animate(with: frames, timePerFrame: ((Double(duration)/1000.0))/Double(frames.count))
gifNode.run(SKAction.repeatForever(gifAnimation))
skScene.addChild(gifNode)
它的工作!然而,'.clear'似乎并没有使图像脱颖而出。还有其他建议吗? –
解决了它。只需将colorBlendFactor更改为0,然后重新应用SKAction来移除过滤器。 –
是的,不好意思忘了补充一点,你应该把colorBlendFator设置为0来解除。谢谢!我现在编辑了答案。 – JohnV