Swift iPhone 5S上严重的SpriteKit UIColor错误

Swift iPhone 5S上严重的SpriteKit UIColor错误,swift,comparison,sprite-kit,uicolor,skspritenode,Swift,Comparison,Sprite Kit,Uicolor,Skspritenode,我在SpriteKit中发现了一个严重的swift bug,当时我正在处理SKSpriteNodes及其颜色 此代码适用于除iPhone 5S之外的所有iPhone: var color1 = UIColor(red: 123/255, green: 123/255, blue: 123/255, alpha: 1) var color2 = UIColor(red: 123/255, green: 123/255, blue: 123/255, alpha: 1) var sprite =

我在SpriteKit中发现了一个严重的swift bug,当时我正在处理SKSpriteNodes及其颜色

此代码适用于除iPhone 5S之外的所有iPhone:

var color1 = UIColor(red: 123/255, green: 123/255, blue: 123/255, alpha: 1)
var color2 = UIColor(red: 123/255, green: 123/255, blue: 123/255, alpha: 1)

var sprite = SKSpriteNode(color: color1, size: CGSizeMake(100, 100))

if(sprite.color == color2){
     println("Same color")
}
如你所见,这两种颜色完全相同。但是在iphone5s模拟器上,if没有被调用


是否有其他人有相同的问题,并且可以提供解决方案?

根据文档:

雪碧套件仅适用于纯色。为了获得最佳效果,请使用 平台类提供的预设颜色或定义的自定义颜色 在RGBA设备颜色空间中

因此,SKSpriteNode对init函数中的
color
参数进行了一些更改。如果调用
encode
,您可以看到它:

sprite.color.encode() // 140,646,370,382,768

color1.encode() // 140,646,367,110,928
如果使用预定义的颜色值,则问题会消失:

var color3 = UIColor.blueColor()
var sprite3 = SKSpriteNode(color: color3, size: CGSizeMake(100, 100))

sprite3.color == color3 // true

您正在比较指针值,而不是实际颜色。看到这些都是UIColor实例,您必须使用isEqual对它们进行比较(显示ObjC代码,因为我不知道它在Swift中是什么样子——或者Swift实际上在幕后使用isEqual):

如果UIColor正确实现,这将比较实际的颜色值,而不是指针

if ([sprite.color isEqual:color2])