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()
}