从 Xcode 中的文件加载场景后出现非整数节点位置问题
Issue with non-integer node positions after loading scene from a file in Xcode
我遇到了一个奇怪的问题,我想与大家分享。虽然变通比较简单,但是有点繁琐,不知道有没有更好的方法。
我使用场景编辑器设计了一个 SpriteKit 场景,加载了场景并在自定义 class 初始化程序中执行了一些自定义逻辑。这涉及创建一些新节点并比较节点位置并向节点位置添加一些整数偏移量。
奇怪的是,我发现尽管节点位置在场景编辑器中始终指定为整数,但它们以非整数形式出现(如调试器中所示)。
具体来说,我有一个 x 值的节点:
96.000122
这似乎是一些二进制小数,所以显然某处设置了一个低位。我再说一遍,在场景编辑器中它显示为“96”。
我认为这有两个问题:
- 比较可能会失败。
- SpriteKit 可能必须对图像进行不必要的抗锯齿处理(如果它已经像素对齐)。
是否有优雅的解决方案可以将场景文件中的所有位置四舍五入,还是必须手动完成?
最后,按照建议,我写了一个扩展来对所有位置进行四舍五入:
extension SKNode {
func fixUp() {
for child in children {
child.position = CGPoint(
x: round(child.position.x * 4) / 4,
y: round(child.position.y * 4) / 4)
child.fixUp()
}
}
}
在这个例子中,我四舍五入到四分之一点,但这是任意的;它可能更小,因为只有非常小的位移无法显示在场景编辑器中。
我在 init
函数中调用它。
我遇到了一个奇怪的问题,我想与大家分享。虽然变通比较简单,但是有点繁琐,不知道有没有更好的方法。
我使用场景编辑器设计了一个 SpriteKit 场景,加载了场景并在自定义 class 初始化程序中执行了一些自定义逻辑。这涉及创建一些新节点并比较节点位置并向节点位置添加一些整数偏移量。
奇怪的是,我发现尽管节点位置在场景编辑器中始终指定为整数,但它们以非整数形式出现(如调试器中所示)。
具体来说,我有一个 x 值的节点:
96.000122
这似乎是一些二进制小数,所以显然某处设置了一个低位。我再说一遍,在场景编辑器中它显示为“96”。
我认为这有两个问题:
- 比较可能会失败。
- SpriteKit 可能必须对图像进行不必要的抗锯齿处理(如果它已经像素对齐)。
是否有优雅的解决方案可以将场景文件中的所有位置四舍五入,还是必须手动完成?
最后,按照建议,我写了一个扩展来对所有位置进行四舍五入:
extension SKNode {
func fixUp() {
for child in children {
child.position = CGPoint(
x: round(child.position.x * 4) / 4,
y: round(child.position.y * 4) / 4)
child.fixUp()
}
}
}
在这个例子中,我四舍五入到四分之一点,但这是任意的;它可能更小,因为只有非常小的位移无法显示在场景编辑器中。
我在 init
函数中调用它。