我在使用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不被调用。
有其他人有同样的问题,可以提供解决方案吗?
答案 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正确实现,这将比较实际颜色值而不是指针。