为什么我的 SpriteKitNode 位置没有正确显示?

Why is my SpriteKitNode position not being displayed properly?

我是 SpriteKit 的新手,我正在学习一个教程,该教程在纵向模式下将 SpritekitNode 放置在屏幕底部附近的中心,但无论我使用什么代码,我的对象都不会假定该位置在教程中讨论。我看过其他几个教程,关于定位 SpriteKitNode 的代码,它们几乎是一样的。

这是我在 GameScene.swift:

中唯一的代码
import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var player:SKSpriteNode!

    override func didMove(to view: SKView) {

        player = SKSpriteNode(imageNamed: "Spaceship")
        player.xScale = 0.5
        player.yScale = 0.5

        player.position = CGPoint(x: self.frame.size.width / 2, y: player.size.height / 2 + 20)

        self.addChild(player)
    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}

我没有向 GameScene.sks 添加任何内容或对 info.plist 进行任何更改,但是使用上面的代码,mySpriteKitNode 显示在屏幕的右中央,如下图所示。飞船应该在红色X附近

我已经查看了几个 post 关于 SpriteKit 中的定位问题,但还没有找到解决方案。

如果有人能解释一下我到底做错了什么?谢谢

发生这种情况是因为您正在学习的教程可能已过时。早些时候,当从 sks 文件加载场景时,它会将 anchorPoint 设置为 0,0。现在,默认设置为 0.5, 0.5.

因此您可以使用当前代码但将场景的锚点设置为 0.0、0.0,或者保持场景的 anchorPoint 不变并相应地设置玩家的 position 属性:

//player.position.x should be 0 which is middle of the screen
player.position.y = -frame.size.height / 2.0 + player.size.height/2.0 + 20.0