Ich habe den folgenden Code, wo ich einen Sprite-Knoten erstellen, der ein animiertes GIF anzeigt. Ich möchte eine andere Funktion erstellen, die das GIF verdunkelt, wenn es aufgerufen wird. Ich könnte immer noch in der Lage sein, die Animation zu sehen, aber der Inhalt wäre sichtbar dunkler. Ich bin mir nicht sicher, wie ich das angehen soll. Soll ich jede Textur oder jeden Frame, der zum Erstellen der Animation verwendet wird, individuell verdunkeln? Wenn ja, wie verdunkle ich eine Textur oder einen Rahmen überhaupt?So verdunkeln Sie die Textur des Sprite-Knotens
// 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)
Es hat funktioniert! ".clear" scheint das Bild jedoch nicht zu deaktivieren. Irgendwelche anderen Vorschläge für das Deaktivieren? –
Gelöst es. Ändern Sie einfach den colorBlendFactor auf 0 und wenden Sie die 'SKAction' erneut an, um den Filter zu entfernen. –
Ja, leider vergessen zu hinzufügen, dass Sie den colorBlendFator auf 0 setzen sollten, um zu deaktivieren. Vielen Dank! Ich habe die Antwort jetzt bearbeitet. – JohnV