【问题标题】:SKAction scaleTo not working on iPhone 5SSKAction scaleTo 不能在 iPhone 5S 上工作
【发布时间】:2014-09-14 21:00:21
【问题描述】:

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

我想用SKAction.scaleTo 缩放SKSpriteNode。这适用于 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 操作正常工作。

【问题讨论】:

  • 你能确认它正在运行序列吗? AKA 获得通过 tile.color==searchcolor.
  • @meisenman 你是绝对正确的。它没有被调用,但 for 循环正在工作。但为什么呢?
  • 好吧,至少我们可以缩小一些导致您的 SKAction 成为问题的用户特定错误。希望其他人可以对颜色系统有更多的了解。

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


【解决方案1】:

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

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"

【讨论】:

  • 感谢您的回答。我会试试的。但为什么它可以在 5S 之外的所有其他设备上运行?
  • 如何从一个值中获取红色值?
  • 5S 有一个 64 位 CPU,很可能运行您的代码的 64 位 (armv7s) 版本,很确定这在某种程度上是相关的。
【解决方案2】:

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

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

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

}

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

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 2014-11-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多