Swift和Spritekit sceneDidLoad被调用多个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift和Spritekit sceneDidLoad被调用多个相关的知识,希望对你有一定的参考价值。

我正在使用一个简单的游戏,我有MenuScene:用户可以选择游戏的类型和GamePlayScene。

第一次用户选择游戏类型的每件事都很好,但第二次所有方法都调用了两次,而第三次方法调用了三次等。

我尝试使用didMoveToView但仍然有同样的问题。

我应该在完成比赛后删除场景吗?如果是的话怎么样?

这是我在场景之间转换的方式。

extension SKScene {
    func presentSceneWith(NameOfScene scene : String){
        if let scene = SKScene(fileNamed: scene){
            scene.scaleMode = .aspectFill
            self.view?.presentScene(scene)
        }
    }
}

我将它用于GamePlayScene并返回到MenuScene。

答案

第一:我正在使用Firebase数据库。

所以问题是:我在观察中使用了If Statement。

喜欢 :

private func searchForOpponents(){
   let ref = Database.database().reference()
   ref.child("activePlayers").child("waiting").observe( DataEventType.value) { (snapshot) in
   // the problem when I put if statement like this
   if snapshot == something {
      presentToNextScene()
   }
}

ref.observe在第二次调用多个,所以基本上我不止一次出现在下一个场景中。

解决方案:在我的例子中,我使用ref.observeSingelEvent()并将DataEventType更改为childChange。

以上是关于Swift和Spritekit sceneDidLoad被调用多个的主要内容,如果未能解决你的问题,请参考以下文章

PhysicsBody 使用 SpriteKit 和 Swift 为零

这个带有 SpriteKit 代码的 Swift 没有达到预期的效果

将 AcceptMouseMovedEvents 用于带有 Storyboard 和 Swift 的 SpriteKit 鼠标操作

Swift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue

SKPhysics 与 Swift 和 SpriteKit

SpriteKit 和 Swift 中 SKSpriteNodes 的 setScale 和 size 有啥区别?