Swift iPhone 5S上严重的SpriteKit UIColor错误
我在SpriteKit中发现了一个严重的swift bug,当时我正在处理SKSpriteNodes及其颜色 此代码适用于除iPhone 5S之外的所有iPhone: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 =
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])