目标
我希望使用SKSpriteNode
的position
属性设置游戏场景中一个子 node 的位置,并将一个内联数学表达式作为参数传递给y
参数.我要添加的子 node 是SKSpriteNode
的子类,它有一个名为yOffset
的定制Int
属性.理想情况下,我希望使用yOffset
来移动 node 的位置.
我所try 的
最初,我将偏移量作为参数的一部分硬编码为CGPoint
,即myNode.position = CGPoint(x: myNode.position.x, y: myNode.position.y - 100)
,并按照预期将 node 定位在场景中.
然而,一旦我改为使用yOffset
,即myNode.position = CGPoint(x: myNode.position.x, y: myNode.position.y - myNode.yOffset)
,我就得到了一个编译器错误,提示‘无法将’Int‘类型的值转换为预期的参数类型’CGFloat‘’.为了解决这个问题,我将myNode.yOffset
更改为CGFloat(myNode.yOffset)
,编译正常.然而,现在在场景中找不到该 node . node 计数仍然显示该 node 已添加,但我不知道它在哪里.
为了避免演员阵容变为CGFloat
,我还try 将yOffset
改为Double
,而不是Int
.代码编译得很好,但同样的问题出现了, node 也找不到了.
我想知道的是
首先,为什么当在计算中使用诸如100
之类的数字文字时,代码编译并且 node 显示得很好,而当使用实例属性yOffset
(也是Int
)时,它需要强制转换为CGFloat
?既然它是一个Int
,就像任何数字文字一样,它不应该编译吗?
其次,与在参数中使用数字文字相比,当yOffset
强制转换为CGFloat
时,为什么 node 的位置不会像预期的那样行为?
这与点到像素的转换有关吗?