Swift 3中的节点定位问题

问题描述:

我刚刚开始研究Swift 3 - 从未编码过,所以我完全不熟悉这一切。一直在寻找一个真正的基本节点教程,并有下面的代码:Swift 3中的节点定位问题

class GameScene: SKScene { 

    override func didMove(to view: SKView) { 

     // SKLabelNode 
     var exampleLabelNode = SKLabelNode(fontNamed: "Helvetica") 
     exampleLabelNode.text = "Example Label Node!" 
     exampleLabelNode.fontSize = 30 
     exampleLabelNode.fontColor = SKColor.white 
     exampleLabelNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 0.75) 
     self.addChild(exampleLabelNode) 

     // SKSpriteNode 
     var exampleSpriteNode = SKSpriteNode(imageNamed: "myImage") 
     exampleSpriteNode.size = CGSize(width: 180, height: 180) 
     exampleSpriteNode.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
     exampleSpriteNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 0.25) 
     exampleSpriteNode.zPosition = 100 
     exampleSpriteNode.name = "exampleName" 
     self.addChild(exampleSpriteNode) 

    } 

} 

这意味着要定位exampleLabelNode在屏幕的顶部中心和3/4 exampleSpriteNode 1/4在底部屏幕。

然而其定位exampleSpriteNode 3/4到屏幕和一半的顶部关闭以与exampleLabelNode右定位在屏幕上。

本教程适用于Swift 2,Swift 3的定位语法等不同吗?

这是因为默认场景anchorPoint是(0.5,0.5)意思是场景的中心。这也是任何节点的默认anchorPoint。这使得点(x:0,y:0)位于场景的中心。

我建议您阅读更多关于此的信息,或者如果您遇到问题,请提出问题以获得更好的理解。

苹果官方文档

SKSpriteNode anchorPoint

SKScene anchorPoint

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

为了解决您的问题,您可以将此行添加到您的didMove(to view)的开头:

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

这台现场anchorPoint现场的左下角,这曾经是怎么回事(该教程已过时)。

或者,您现在可以重做精灵放置,知道anchorPoint的工作原理。我建议这样做是因为我发现从中心向外而不是从左下角构建场景时,构建游戏更容易。

+0

我想的行: 'exampleSpriteNode.anchorPoint = CGPoint(X:0.5,Y:0.5)' 是定位时它来设置exampleSpriteNode的中心点。 所以我正确地认为通过使用屏幕的中心作为默认x:0,y:0而不是左下角来进行定位? – Bootfit

+0

@Bootfit就是这样。 'anchorPoint'是所有节点(包括场景)都拥有的属性。它决定节点的哪一部分是中心。你刚才编写的例子更改为节点的anchorPoint,因为它以'exampleSpriteNode.anchorPoint = ...'开头。我的例子改变了场景(self),因为它开始于'self.anchorPoint = ...' – Nik

+0

@Bootfit我不明白你在问什么,但是添加了这行吗? – Nik