Swift 3中的节点定位问题

时间:2017-04-23 14:26:36

标签: ios swift sprite-kit

我刚刚开始研究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的定位语法等也不同吗?

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为默认场景anchorPoint是(0.5,0.5),意味着场景的中心。这也是任何节点的默认anchorPoint。这使得点(x:0,y:0)位于场景的中心。

如果您遇到麻烦,我建议您仔细阅读或提出问题以便更好地了解它。

官方Apple文档

SKSpriteNode anchorPoint

SKScene anchorPoint

注意:当SKScene的默认值为(0,0)时,它们的文档不正确。

要解决您的问题,您可以将此行添加到didMove(to view)

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

这会将场景anchorPoint设置为场景的左下角,过去就是这样(教程已过时)。

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