我只是开始研究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/

10-12 06:29