2016-12-21 4 views
2

A SKSpriteNodeのSKColorは、色相、彩度、明度&アルファを使用して作成する方法があります。SKSpriteNodeのSKColor(HSBA)の色相を取得して変更しますか?

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

私はSKSpriteNodeの色相で取得し、それに変更を加えるにはどうすればよいですか?たとえば、2で割ってください。

答えて

2

テクスチャ(必要に応じて色をブレンド)、画像、着色の四角形を描画するノードです。だから、これは自然です。 のiOS 9.xののでまたtexture

と呼ばれるスプライトを描画するために使用されるテクスチャを表す

あなたがSKSpriteNodeを作るとき、あなたはインスタンスプロパティを持っているが、我々はから画像を取得することができます次のコードに続くテクスチャ

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興味深い答えの後、我々はより快適スウィフト3.0バージョンにそれを翻訳することができます:この例では、私は私のSKSpriteNodespriteBgとして呼び出すので

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

私は今すぐこのテストをすることができる場所ではありませんが、UIColorのドキュメント(UIColorとSKColorは基本的に同じものです)を見ると、 .getHue(...)関数は、色のコンポーネントを取得し、それに変更を加えた後、SKSpriteNodeのcolorプロパティを新しい値に設定します。 .getHue(...)関数は、 "HSB色空間の色を構成する成分を返します。"

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

SKSpriteNode
+0

私はこれを調べて、それを使用しての変形を試みました。しかし、私のコーディングはとても難しいので、私はどこにもいませんでした。実際には、後ろに行く。 – Confused

+0

@Confused 1.あなたのコードは大嫌いではありません。あなたは面白くて良い質問をしました。 –

関連する問題