使用iPhone 5S作为开发目标(模拟器和真实设备)时,我发现了一种奇怪的行为。
我想使用SKSpriteNode
缩放SKAction.scaleTo
。这适用于iPhone 4S和iPhone 5模拟器(使用iOS 7.0.3和iOS 8测试)。
但是在iPhone 5S模拟器上,节点无法扩展。同样在我真正的iPhone 5S上,它无法扩展。
这是我的代码:
for tile in tileArray{
if(tile.color == searchColor){
var action = SKAction.scaleTo(0.5, duration: 0.5)
var action2 = SKAction.scaleTo(1, duration: 0.5)
tile.runAction(SKAction.repeatActionForever(SKAction.sequence([action, action2])))
}
}
但是如你所见,两种颜色是相同的:
UIDeviceRGBColorSpace 0.203922 0.286275 0.368627 1
UIDeviceRGBColorSpace 0.203922 0.286275 0.368627 1
这怎么可能?
重要提示:其他SKaction.scaleTo操作正常运行。
答案 0 :(得分:0)
您不是在比较颜色,而是在比较指针值:
if(tile.color == searchColor)
这会测试tile.color和searchColor是否都指向相同的内存地址。根据颜色的创建方式,这些地址可能不同。尝试测试各个颜色组件,如:
if (tile.color.r == seachColor.r && tile.color.g == searchColor.b && etc ..)
答案 1 :(得分:0)
原因是UIDeviceRGBColorSpace
,这在iPhone 5S上有所不同。所以我必须创建一个对象类,其中也有一个名称。现在我必须将颜色名称添加到类中,但我可以比较颜色:
var color1 = ColorClass("myRed", color:theColor)
var color2 = ColorClass("myRed", color:theColor2)
if(color1.name == color2.name){
}
当然,此修复程序实际上取决于案例。所以对于其他许多人来说,这个解决方案对于他们的目的来说还不够好。