Swift中的锚点出现问题?

3
我将尝试理解锚点在Swift中的基础知识,阅读以下内容:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Nodes/Nodes.html 我了解到,在Swift中使用Sprite Kit时,场景的锚点位于屏幕左下角。
因此,如果我像这样定位一个节点:
myNode.position = CGPoint(x: 0, y: 0)
self.addChild(myNode)

我在我的视图中没有看到它。所以我尝试了另一件事:

 myNode.position = CGPoint(x: middleOfmyView, y: 0)
    self.addChild(myNode)

现在我能看到正方形顶部的一半。因此,我可以看到屏幕底部上方20像素。

于是我添加了:

  myNode.position = CGPoint(x: middleOfmyView, y: 0+myNode.frame.size.height/2)
        self.addChild(myNode)

现在我可以在屏幕中央看到整个正方形。

然后我将它放在 x: 0 的位置,并让 Y 点保持不变:

 myNode.position = CGPoint(x: 0, y: 0+myNode.frame.size.height/2)
 self.addChild(myNode)

现在即使屏幕右下角写着“1个节点”,我也看不到我的节点出现了!因此,我想知道iPhone屏幕的0,0点是否真的在屏幕的左下角?那么我的精灵节点的锚点在哪里?如何将我的正方形放在屏幕左下角?这只是为了理解事物是如何工作的...非常感谢你的帮助:) 我正在使用Xcode 7.3.1,仍然不明白为什么点0会导致我看不到我的东西...这肯定是个bug吧?

你确定场景在视图中的位置正确吗?与主视图的框架相比,场景的frame是什么? - jrturton
当我打印框架场景时,我得到了这个:((-0.0,-0.0,1024.0,768.0)) 所以和主视图一样,对吧?无论如何,在尝试将我的节点放在场景中之前,我没有改变场景的框架。 - user1849661
1
视图大小不一定与场景大小相同(为实现此目的,您可以在视图控制器中设置 scene.size = view.bounds.size)。因此,如果您的视图是 iPhone 6 大小,则默认情况下场景将是 1024x768,这意味着,如果您将节点放置在 0,0 处,根据节点大小它可能不可见。 - Whirlwind
非常感谢,我添加了scene!.size = view.bounds.size,现在它可以工作了,我可以看到我的小正方形 :) - user1849661
1
不建议使用帧大小作为场景大小,因为在使用iPad时会破坏宽高比。将gameViewController更改为使用.aspectFill,并将场景大小设置为768x1024(纵向)或1024x767(横向)。这可以防止场景在不同设备上被扭曲。 - Nik
1个回答

3

SKSpriteNode的默认锚点为(0.5, 0.5),这意味着节点的中心会在设置的位置处。若要更改锚点,请执行以下操作:node.anchorPoint = CGPoint(x: 0, y: 0),该示例将节点的锚点设置为其左下角。请注意,更改锚点也会更改旋转原点,并且锚点值介于0和1之间。要将正方形放置在左下角:

myNode.anchorPoint = CGPoint(x: 0, y: 0)
myNode.position = CGPoint(x: frame.minX, y: frame.minY)

如果您需要其他方面的帮助(或者我没有涵盖您想要的内容),请随时向我提问,我会尽力帮助您。


你好Nik,感谢你的回答。当我按照你所说的去做时,我无法看到我的正方形,尽管它应该显示在我的视图中。我看不到它!你有什么解释吗?你能否尝试一下,启动应用程序并告诉我你得到了什么?我只有“1个节点”,屏幕上没有任何东西出现... - user1849661
尝试在你的场景中添加以下代码 self.anchorPoint = CGPoint(x: 0, y: 0) - Nik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接