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)位于场景的中心。
我建议您阅读更多关于此的信息,或者如果您遇到问题,请提出问题以获得更好的理解。
苹果官方文档
注:为SKScene该文档是不正确时,它说的默认值是(0,0)。
为了解决您的问题,您可以将此行添加到您的didMove(to view)
的开头:
self.anchorPoint = CGPoint(x: 0, y: 0)
这台现场anchorPoint
现场的左下角,这曾经是怎么回事(该教程已过时)。
或者,您现在可以重做精灵放置,知道anchorPoint
的工作原理。我建议这样做是因为我发现从中心向外而不是从左下角构建场景时,构建游戏更容易。
我想的行: 'exampleSpriteNode.anchorPoint = CGPoint(X:0.5,Y:0.5)' 是定位时它来设置exampleSpriteNode的中心点。 所以我正确地认为通过使用屏幕的中心作为默认x:0,y:0而不是左下角来进行定位? – Bootfit
@Bootfit就是这样。 'anchorPoint'是所有节点(包括场景)都拥有的属性。它决定节点的哪一部分是中心。你刚才编写的例子更改为节点的anchorPoint,因为它以'exampleSpriteNode.anchorPoint = ...'开头。我的例子改变了场景(self),因为它开始于'self.anchorPoint = ...' – Nik
@Bootfit我不明白你在问什么,但是添加了这行吗? – Nik