Swift 3 中的节点定位问题

问题描述 投票:0回答:2

我刚刚开始研究 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 的定位语法等是否有所不同?

ios swift sprite-kit
2个回答
2
投票

发生这种情况是因为默认场景

anchorPoint
是(0.5,0.5),表示场景的中心。这也是任何节点的默认
anchorPoint
。这使得点 (x: 0, y: 0) 位于场景的中心。

如果您遇到问题,我建议您阅读更多相关内容或提出问题以更好地理解它。

苹果官方文档

SKSpriteNode 锚点

SK场景锚点

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

要解决您的问题,您可以将此行添加到

didMove(to view)
:

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

这会将场景

anchorPoint
设置到场景的左下角,这曾经是这样的(教程已过时)。

或者,既然您知道

anchorPoint
的工作原理,您就可以重做精灵放置。我建议这样做是因为我发现从中心向外而不是从左下角构建场景时构建游戏更容易。


0
投票

我唯一的评论集中在上面:

“如果您遇到问题,我建议您阅读更多相关内容或提出问题,以便更好地理解它。”

自 1996 年以来,我一直担任许多科学和非科学科目的教师。

一位好老师会在每一个环节都尽力鼓励学生的努力,而不是贬低学生的努力。

我确实认为最上面的引言接近于“放下”。此外,我非常有信心OP多次尝试了你的建议。

我的2美分价值。

© www.soinside.com 2019 - 2024. All rights reserved.