gpt4 book ai didi

swift - 为什么在使用 CGFloat 而不是数字文字时节点的位置会发生变化?

转载 作者:行者123 更新时间:2023-12-05 04:22:09 25 4
gpt4 key购买 nike

目标

我想使用 SKSpriteNodeposition 属性设置我游戏场景中子节点的位置,并将内联数学表达式作为参数传递给 y 参数。我要添加的子节点是 SKSpriteNode 的子类,它有一个名为 yOffset 的自定义 Int 属性。理想情况下,我想使用 yOffset 来移动节点的位置。

我尝试了什么

最初,我将偏移量硬编码为 CGPoint 参数的一部分,即 myNode.position = CGPoint(x: myNode.position.x, y: myNode.position .y - 100) 并且节点按预期定位在场景中。

但是,一旦我改为使用 yOffset,即 myNode.position = CGPoint(x: myNode.position.x, y: myNode.position.y - myNode.yOffset ) 我收到一个编译器错误,提示“无法将‘Int’类型的值转换为预期的参数类型‘CGFloat’”。为了解决这个问题,我将 myNode.yOffset 更改为 CGFloat(myNode.yOffset) 并且编译正常。但是,现在在场景中找不到该节点。节点数仍然显示添加了节点,但我不知道它在哪里。

为了避免转换为 CGFloat,我还尝试将 yOffset 更改为 Double 而不是 Int。代码编译正常,但出现同样的问题,找不到节点。

我想知道的

首先,为什么当在计算中使用100这样的数字文字时,代码编译并且节点出现得很好,但是当实例属性yOffset(这也是一个Int)被使用,它需要转换为CGFloat?它不应该编译吗,因为它是一个 Int 就像任何数字文字一样?

其次,为什么当 yOffset 被强制转换为 CGFloat 时,与在参数中使用数字文字相比,节点的位置不符合预期?

与从点到像素的转换有什么关系吗?

最佳答案

CGFloat 取决于系统架构,在幕后是 DoubleFloat,以及标准库浮点类型,例如作为FloatDouble,符合ExpressibleByIntegerLiteral 协议(protocol)。这意味着您可以通过分配整数文字来初始化任何这些类型的变量或常量,并且它将被与协议(protocol)关联的初始化程序“翻译”为 CGFloat。当您提供内联整数文字作为 y: myNode.position.y - 100 时,这就是正在发生的事情。

当您将偏移属性指定为 Int 时,您不能在需要 CGFloat 的计算中使用它 - 因为它不再是文字值ExpressibleByIntegerLiteral 初始化程序不能用于将其转换为 CGFloat。因此你是你最初的错误。

没有看到完整的代码,而不是内联代码片段,不清楚为什么在使用 yOffset 属性进行偏移时会出现放置错误。没有明显的原因。您是否使用调试器查看了代码以检查实际情况,确认实际属性值是否如您所想,以及 Sprite 的位置值是多少?

关于swift - 为什么在使用 CGFloat 而不是数字文字时节点的位置会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74045389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com