我只是开始研究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的定位语法等是否有所不同?
最佳答案
发生这种情况是因为默认场景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
的工作原理,则可以重做精灵的放置。我建议这样做是因为我发现从中央向外而不是从左下角构建场景时,构建游戏会更容易。关于ios - Swift 3中的节点定位问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43572371/