【问题标题】:SpriteKit GameScene compatibility for ios7ios7 的 SpriteKit GameScene 兼容性
【发布时间】:2016-04-18 14:05:43
【问题描述】:

我的应用在 iOS 8+ 上运行良好,但 iOS 7 搞乱了所有坐标 为 ios 7 复制创建 gameScene 实现的正确方法是什么

这是我的做法:

   if #available(iOS 8, *) {
    if let scene = GameScene(fileNamed:"GameScene") {
        self.skView = self.view as! SKView

        skView.ignoresSiblingOrder = true

        scene.scaleMode = .AspectFill

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "quitToLevel:", name: "quitToLevelID", object:nil)
        skView.presentScene(scene)
    }
     } else {
        //here starts the wrong part
        if let scene = GameScene(size: view.frame.size) as GameScene? {

            let skView = self.view as! SKView

            scene.scaleMode = .AspectFill

            NSNotificationCenter.defaultCenter().addObserver(self, selector: "quitToLevel:", name: "quitToLevelID", object:nil)
            skView.presentScene(scene)
        }
    }

【问题讨论】:

    标签: ios ios7 sprite-kit


    【解决方案1】:
    extension SKNode {
        class func unarchiveFromFile(file : NSString) -> SKNode? {
            if let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks") {
                var sceneData = try! NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe)
                var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
    
                archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
                let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! SKScene
                archiver.finishDecoding()
                return scene
            } else {
                return nil
            }
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      不确定它是否会有所不同,但您应该将场景大小基于 skView.bounds.size 的 else 语句中

      所以改成这个

       } else {
          //here starts the wrong part
          let skView = view as! SKView!
          let scene = GameScene(size: skView.bounds.size)
      
          scene.scaleMode = .AspectFill
      
          NSNotificationCenter.defaultCenter().addObserver(self, selector: "quitToLevel:", name: "quitToLevelID", object:nil)
      
          skView.presentScene(scene)
      }
      

      看看它现在是否正常工作。

      不确定这是否适用于 ios 7,但值得一试。 您需要您的应用程序支持 ios 7 吗?只有大约 10% 的用户仍在运行该特定操作系统。

      【讨论】:

      • 嘿,谢谢你,我已经用我在评论中发布的 SKNode 扩展解决了这个问题
      • 它说我只能明天才能做到:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多