Swift 3中的节点定位问题

g2ieeal7  于 2024-01-05  发布在  Swift
关注(0)|答案(1)|浏览(167)

我刚刚开始研究Swift 3 -以前从未编码过,所以我对它完全陌生。一直在看一个非常基本的Node教程,并有以下代码:

  1. class GameScene: SKScene {
  2. override func didMove(to view: SKView) {
  3. // SKLabelNode
  4. var exampleLabelNode = SKLabelNode(fontNamed: "Helvetica")
  5. exampleLabelNode.text = "Example Label Node!"
  6. exampleLabelNode.fontSize = 30
  7. exampleLabelNode.fontColor = SKColor.white
  8. exampleLabelNode.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height * 0.75)
  9. self.addChild(exampleLabelNode)
  10. // SKSpriteNode
  11. var exampleSpriteNode = SKSpriteNode(imageNamed: "myImage")
  12. exampleSpriteNode.size = CGSize(width: 180, height: 180)
  13. exampleSpriteNode.anchorPoint = CGPoint(x: 0.5, y: 0.5)
  14. exampleSpriteNode.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height * 0.25)
  15. exampleSpriteNode.zPosition = 100
  16. exampleSpriteNode.name = "exampleName"
  17. self.addChild(exampleSpriteNode)
  18. }
  19. }

字符串
这意味着将 exampleLabelNode 放置在屏幕的中心和3/4的顶部,exampleSpriteNode 1/4的底部。
然而,它的定位 exampleSpriteNode 3/4到屏幕顶部,一半到右边,exampleLabelNode 定位在屏幕之外。
本教程是针对Swift 2的,那么Swift 3的定位语法等是否不同?

jc3wubiy

jc3wubiy1#

这是因为默认场景anchorPoint是(0.5,0.5),这意味着场景的中心。这也是任何节点的默认anchorPoint。这使得点(x:0,y:0)位于场景的中心。
我建议你多读一些这方面的内容,或者如果你有问题的话,问一些问题来更好地理解它。

苹果官方微博

SKSpriteNode anchorPoint
SKScene anchorPoint

**注意:**SKScene的文档说默认值为(0,0)是不正确的。

要解决您的问题,您可以将这一行添加到didMove(to view)的开头:

  1. self.anchorPoint = CGPoint(x: 0, y: 0)

字符串
这会将场景anchorPoint设置到场景的左下方,这是以前的场景(本教程已过时)。
或者,你可以在知道anchorPoint的工作原理后重新放置精灵。我建议这样做,因为我发现从中心向外构建场景比从左下角构建场景更容易。

展开查看全部

相关问题