何时使用sceneDidLoad v didMove(查看:)

CMR*_*CMR 5 ios skview skscene swift

有人可以帮我理解 GameScene 中的 sceneDidLoad 和 didMove(to view:) 之间的区别吗?我意识到一旦出现场景就会调用didMove(to view:) 。而sceneDidLoad在场景初始化后被调用。所以它的逻辑顺序是先sceneDidLoad,然后再didMove(to view:)(对吧?)

话虽如此,我正在尝试使用以下方法创建一个弹跳球:

    let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
    self.physicsBody = borderBody
    physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0)

    let testBall = SKShapeNode(circleOfRadius: 20)
    self.addChild(testBall)

    testBall.physicsBody = SKPhysicsBody(circleOfRadius: 
    testBall.frame.size.width/2)
    testBall.physicsBody!.restitution = 1.0
    testBall.physicsBody!.friction = 0.0
    testBall.physicsBody!.angularDamping = 0.0
    testBall.physicsBody!.linearDamping = 0.0

    testBall.physicsBody!.applyImpulse(CGVector(dx: 10.0, dy: 10.0))
Run Code Online (Sandbox Code Playgroud)

通过覆盖sceneDidLoad 或didMove,我得到了相同的预期结果。我不明白哪个是“更聪明”或最佳实践方法,为什么?

谢谢!

C

Mur*_*phy 6

调用顺序为: SceneDidLoadDidMove

SceneDidLoad:在场景初始化或解码或场景行为之后立即调用您可以创建初始化视图和节点的实例变量。请注意,您无法添加新视图,因为场景尚不知道主视图,但您可以将节点添加到场景中

DidMove:这里场景知道视图。您还可以构建所有场景和行为。

因此,对于性能增益问题,可以在场景呈现给视图之前使用 SceneDidLoad 来初始化事物。

https://developer.apple.com/documentation/spritekit/skscene/1645216-scenedidload https://developer.apple.com/documentation/spritekit/skscene/1519607-didmove