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

时间:2017-10-10 01:27:38

标签: ios swift skscene skview

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

话虽如此,我正试图使用​​以下内容创建一个弹跳球:

    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))

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

谢谢!

C

1 个答案:

答案 0 :(得分:2)

通话顺序为: SceneDidLoad DidMove

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

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

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

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