sprite-kit - 获取和更改 SKSpriteNode 的 SKColor(HSBA) 的色调?

标签 sprite-kit skspritenode hsb

SKSpriteNode 的 SKColor 可以通过色调、饱和度、亮度和 Alpha 创建:

    let myColor = SKColor(hue: 0.5, saturation: 1, brightness: 1, alpha: 1)
 mySprite.color = myColor

如何获取 SKSpriteNode 的色调并对其进行更改?例如,除以 2。

最佳答案

SKSpriteNode 是一个绘制纹理(可以选择与颜色混合)、图像、彩色方 block 的节点。所以,这就是它的本质。

当您创建SKSpriteNode时,您就有一个实例属性,它表示用于绘制 Sprite 的纹理,也称为 texture

iOS 9.x起,我们能够按照以下代码从纹理中检索图像。在此示例中,我将我的 SKSpriteNode 称为 spriteBg:

let spriteBg = SKSpriteNode.init(texture: SKTexture.init(imageNamed: "myImage.png"))

if let txt = spriteBg.texture {
            if #available(iOS 9.0, *) {
                let image : UIImage = UIImage.init(cgImage:txt.cgImage())
            } else {
                // Fallback on earlier versions and forgot this code..
            }
}

已关注 this有趣的答案,我们可以将其转换为更舒适的 Swift 3.0 版本:

func imageWith(source: UIImage, rotatedByHue: CGFloat) -> UIImage {
        // Create a Core Image version of the image.
        let sourceCore = CIImage(cgImage: source.cgImage!)
        // Apply a CIHueAdjust filter
        guard let hueAdjust = CIFilter(name: "CIHueAdjust") else { return source }
        hueAdjust.setDefaults()
        hueAdjust.setValue(sourceCore, forKey: "inputImage")
        hueAdjust.setValue(CGFloat(rotatedByHue), forKey: "inputAngle")
        let resultCore  = hueAdjust.value(forKey: "outputImage") as! CIImage!
        let context = CIContext(options: nil)
        let resultRef = context.createCGImage(resultCore!, from: resultCore!.extent)
        let result = UIImage(cgImage: resultRef!)
        return result
}

所以,最后我们可以用前面的代码来做:

if let txt = spriteBg.texture {
            if #available(iOS 9.0, *) {
                let image : UIImage = UIImage.init(cgImage:txt.cgImage())
                let changedImage = imageWith(source: image, rotatedByHue: 0.5)
                spriteBg.texture = SKTexture(image: changedImage)
            } else {
                // Fallback on earlier versions or bought a new iphone
            }
}

关于sprite-kit - 获取和更改 SKSpriteNode 的 SKColor(HSBA) 的色调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257876/

相关文章:

ios - 'SKNode ?' does not have a member named '位置'

swift - 根据节点的旋转对节点施加力

ios - 从子 SKSpriteNode 读取值

image-processing - RGB 或 HSV 尺度上的 k 均值聚类?

.net - .Net Color 结构是否使用 HSB 或 HSL 颜色空间?

ios - 如何禁用 SpriteKit 节点触摸事件,然后在 25 秒后启用它以被触摸并移动到下一个场景?

ios - SKTexture 获取图像名称

sprite-kit - SpriteKit 坐标系原点

java - 更改 HSB 颜色模式中的不透明度

iOS SpriteKit 协调 origin 问题