我刚刚开始研究Swift 3 - 之前没有编码,所以我完全不熟悉它。一直在看一个非常基本的Node教程,并有以下代码:
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的定位语法等也不同吗?
答案 0 :(得分:2)
这种情况正在发生,因为默认场景anchorPoint
是(0.5,0.5),意味着场景的中心。这也是任何节点的默认anchorPoint
。这使得点(x:0,y:0)位于场景的中心。
如果您遇到麻烦,我建议您仔细阅读或提出问题以便更好地了解它。
官方Apple文档
注意:当SKScene的默认值为(0,0)时,它们的文档不正确。
要解决您的问题,您可以将此行添加到didMove(to view)
:
self.anchorPoint = CGPoint(x: 0, y: 0)
这会将场景anchorPoint
设置为场景的左下角,过去就是这样(教程已过时)。
或者,您可以在知道anchorPoint
如何工作的情况下重做精灵位置。我建议这是因为我发现从中心向外而不是从左下角构建场景时,构建游戏会更容易。