获取并更改SKSpriteNode的SKColor(HSBA)的色调?

时间:2016-12-21 08:03:32

标签: sprite-kit skspritenode hsb

SKSpriteNode的SKColor有一种方法可以用色调,饱和度,亮度和亮度来创建。阿尔法:

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

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

2 个答案:

答案 0 :(得分:2)

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

制作SKSpriteNode时,您有一个实例属性,表示用于绘制精灵的纹理,同时也称为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
            }
}

答案 1 :(得分:1)

我现在不能测试这个,但是查看UIColor文档(UIColor和SKColor基本相同),你应该可以使用{{1函数检索颜色的组件,对其进行更改,然后将SKSpriteNode的颜色属性设置为新值。 .getHue(...)函数“返回构成HSB颜色空间中颜色的组件。”

https://developer.apple.com/reference/uikit/uicolor/1621949-gethue