SpriteKit:场景完成呈现时回调?

Posted

技术标签:

【中文标题】SpriteKit:场景完成呈现时回调?【英文标题】:SpriteKit: callback when scene is done presenting? 【发布时间】:2017-12-20 04:43:17 【问题描述】:

在 SpriteKit 中,当场景完成转换时是否有回调?

SKView presentScene 函数似乎没有回调。

另一种方法是让场景在场景进入视野后手动通知调用者,但希望有一种更简洁的方法,使用原生回调。

【问题讨论】:

据我所知没有回调,需要在老场景上使用moveFromView @Knight0fDragon 看起来就是这样。请张贴作为答案,以便您获得信用!谢谢!尽管您不需要使用旧场景。您可以使用新场景中的事件(例如 willMove、didMove)。 不能使用新场景,必须使用旧场景,新场景立即触发,这不是你想要的 【参考方案1】:

presentScene 在场景完成转换时没有已知的回调,而是使用Notifications 或在您的传出场景func willMove(from:view) 上创建自己的某种代理来实现所需的效果

func willMove(from view:SKView)

   NotificationCenter.default.post(name: "TRANSITIONCOMPLETE", object: nil)
   //or create a delegate using protocols, assign the delegate, and call it
   delegate?.finishedTransition()

注意,您必须使用出局场景willMove(from:view),这是过渡期间发生的最后一件事。 didMove(to:view)incomingScene 是过渡的开始

【讨论】:

正确,虽然从技术上讲,问题要求在过渡结束时通知,所以didMove 是正确的(以及使用了什么)。感谢您的帮助! @Crashalot.... 你和我对“结束”的定义截然不同。对我来说,那是过渡结束的时候,也就是 willMove(fromView) 你是对的,“结论”是模棱两可的。问题的措辞是正确的:当新场景出现时。 ...不,这不是模棱两可的。您希望在新场景出现时出现,还是希望在过渡完成时出现?这是两件不同的事情 新场景出现时,好像presentScene在新场景出现时有回调。谢谢!

以上是关于SpriteKit:场景完成呈现时回调?的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 中未呈现场景

Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?

SpriteKit 在转换到新场景时收到有关 UIElements 的错误

SKScene touchesEnded 第二次呈现场景时未调用

Spritekit 场景内容被放大

使用 SpriteKit 和内置物理引擎移动和跳跃精灵