1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpriteKitを試してみる9 SKSpriteNodeのcolor

Posted at

SKSpriteNodeのプロパティにcolorが存在するが、ここにUIColor.grayColor()をセットした場合、if文でイコールか確認しても何故かイコールになりません。

let s = SKSpriteNode(texture: nil, color: UIColor.grayColor(), size: CGSizeMake(50,50))

if(s.color.isEqual(UIColor.grayColor())){
	// ここに来てくれない
}

ログで確認してみると違いが発覚します。

 NSLog("%@ %@", s.color, UIColor.grayColor())

ログ結果

UIDeviceRGBColorSpace 0.5 0.5 0.5 1 UIDeviceWhiteColorSpace 0.5 1

s.colorはUIDeviceRGBColorSpaceなのに、grayColorはUIDeviceWhiteColorSpaceになっており、16進数での世界では別のデータになっている為にイコールではない・・・みたい。
ちなみにredColorやblueColorといった色はイコールが成り立ちます。色によってUIDeviceRGBColorSpaceかUIDeviceWhiteColorSpaceが決まるよう。
では何故、SKSpriteNodeにセットしたgrayColorがUIDeviceRGBColorSpaceで表現されるようになったかと言うと確証はありませんが、rectangleに色をセットする場合、UIColorからCGColorを取得してセットするが、colorのgetメソッドで色を取得する際、元のCGColorからUIColorに変換する際は元々はUIDeviceWhiteColorSpaceでもUIDeviceRGBColorSpaceにしてしまうのではないか・・・と推測しています。

ではこれを回避する手段として、とりあえずの策としてSKSpriteNodeのサブクラスにcolorを持つ別プロパティを用意してそれで色の確認を取るようにしています。今イチクールな回避策ではないと思うが、今はとりあえずこれで良しとしています。

class BaseUnit: SKSpriteNode {
	var enemyColor : UIColor = UIColor.blueColor()
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?