ios - Swift 和 Spritekit sceneDidLoad 被多次调用

标签 ios swift sprite-kit scene

我正在开发一个简单的游戏,我有 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 语句

喜欢:

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

关于ios - Swift 和 Spritekit sceneDidLoad 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48113903/

相关文章:

ios - 为什么在 iOS 中使用 NSUserDefaults?

ios - 无法控制将引用对象拖动到 Xcode 9.2 (9C40b) iOS 项目中的 ViewController

swift - 试图了解 URLSession 身份验证挑战

ios - Swift iOS 中的 GMSCircle 不规则边框

ios - 应用程序在点击时立即将某些用户抛出

swift - 如何在 Swift、SpriteKit 中创建弹弓机制

swift - 过滤快速用户触摸输入

ios - 在 UITableView 中重用已加载的标题 View

iOS:使用 UINavigationBarAppearance 时指定状态栏文本颜色现在 barstyle 被忽略

ios - 在 Facebook 上分享 IOS 11 Swift