SKSpriteNode の SKColor には、色相、彩度、明るさ、アルファを使用して作成する方法があります。
let myColor = SKColor(hue: 0.5, saturation: 1, brightness: 1, alpha: 1)
mySprite.color = myColor
の色相を取得して変更するにはどうすればよいSKSpriteNode
ですか? たとえば、2 で割ります。
SKSpriteNode の SKColor には、色相、彩度、明るさ、アルファを使用して作成する方法があります。
let myColor = SKColor(hue: 0.5, saturation: 1, brightness: 1, alpha: 1)
mySprite.color = myColor
の色相を取得して変更するにはどうすればよいSKSpriteNode
ですか? たとえば、2 で割ります。
AnSKSpriteNode
は、テクスチャ (オプションで色とブレンド)、画像、色付きの正方形を描画するノードです。ですから、これが自然です。
を作成すると、テクスチャとも呼ばれるスプライトの描画に使用されるテクスチャを表すインスタンス プロパティSKSpriteNode
があります。
iOS 9.x以降、以下のコードに従ってテクスチャから画像を取得できます。この例では、 my SKSpriteNode
asを呼び出し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..
}
}
この興味深い回答に従って、より快適な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
}
}
私は今これをテストできる場所にいませんが、ドキュメント (UIColor と SKColor は基本的に同じものです) を見ると、関数を使用して色のコンポーネントを取得し、変更を加えることUIColor
ができるはずです。.getHue(...)
次に、SKSpriteNode の color プロパティを新しい値に設定します。.getHue(...)
関数「HSB 色空間で色を構成するコンポーネントを返します。」
https://developer.apple.com/reference/uikit/uicolor/1621949-gethue