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

Posted

技术标签:

【中文标题】何时使用 sceneDidLoad v didMove(查看:)【英文标题】:When to use sceneDidLoad v didMove(to view:) 【发布时间】:2018-03-21 07:19:00 【问题描述】:

有人可以帮我理解 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))

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

谢谢!

C

【问题讨论】:

【参考方案1】:

调用顺序为: SceneDidLoadDidMove

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

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

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

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

【讨论】:

以上是关于何时使用 sceneDidLoad v didMove(查看:)的主要内容,如果未能解决你的问题,请参考以下文章

oracle何时查询v$rman

识别默认的 Android Checkbox 动画何时结束

Vim何时使用Visual模式?

使用 flutter_bloc 包时,何时实际手动关闭 bloc?

Oracle SQL 语法:V$ 视图

JavaScript 何时同步?