0

我在使用 iPhone 5S 作为开发目标(模拟器和真实设备)时发现了一个奇怪的行为。

我想SKSpriteNodeSKAction.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 块。我不知道为什么。对于其他 iPhone,它可以工作。

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

UIDeviceRGBColorSpace 0.203922 0.286275 0.368627 1
UIDeviceRGBColorSpace 0.203922 0.286275 0.368627 1

这怎么可能?

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

4

2 回答 2

0

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

if(tile.color == searchColor)

这将测试 tile.color 和 searchColor 是否都指向相同的内存地址。根据创建颜色的方式,这些地址可能不同。尝试测试单个颜色分量,如下所示:

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

请注意,浮点值的相等性是“相对的”

于 2014-09-16T08:01:40.730 回答
0

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

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

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

}

当然,此修复程序确实取决于具体情况。因此,对于许多其他人来说,这种解决方案不足以满足他们的目的。

于 2014-09-17T10:35:51.127 回答