iPhone 5S上严重的SpriteKit UIColor错误

时间:2014-09-15 15:55:55

标签: swift comparison sprite-kit uicolor skspritenode

我在使用SKSpriteNodes及其颜色时发现SpriteKit中存在严重的快速错误。

此代码适用于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")
}

如你所见,这两种颜色绝对相同。但是在iPhone 5S模拟器上,if isn不被调用。

有其他人有同样的问题,可以提供解决方案吗?

2 个答案:

答案 0 :(得分:0)

根据文件here

  

Sprite Kit仅适用于纯色。为获得最佳效果,请使用   平台类提供的预设颜色或定义的自定义颜色   在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

答案 1 :(得分:0)

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

if ([sprite.color isEqual:color2])

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