SKAction规模不适用于iPhone 5S

时间:2014-09-14 21:00:22

标签: swift sprite-kit ios-simulator skaction rescale

使用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])))

            }
        }

编辑:

我现在发现,iPhone 5S上没有调用if-block。我不知道为什么。对于其他iPhone,它可以工作。

但是如你所见,两种颜色是相同的:

UIDeviceRGBColorSpace 0.203922 0.286275 0.368627 1
UIDeviceRGBColorSpace 0.203922 0.286275 0.368627 1

这怎么可能?

重要提示:其他SKaction.scaleTo操作正常运行。

2 个答案:

答案 0 :(得分:0)

您不是在比较颜色,而是在比较指针值:

if(tile.color == searchColor)

这会测试tile.color和searchColor是否都指向相同的内存地址。根据颜色的创建方式,这些地址可能不同。尝试测试各个颜色组件,如:

if (tile.color.r == seachColor.r && tile.color.g == searchColor.b && etc ..)

请注意equality for floating point values is "relative"

答案 1 :(得分:0)

原因是UIDeviceRGBColorSpace,这在iPhone 5S上有所不同。所以我必须创建一个对象类,其中也有一个名称。现在我必须将颜色名称添加到类中,但我可以比较颜色:

var color1 = ColorClass("myRed", color:theColor)
var color2 = ColorClass("myRed", color:theColor2)

if(color1.name == color2.name){

}

当然,此修复程序实际上取决于案例。所以对于其他许多人来说,这个解决方案对于他们的目的来说还不够好。