多个 sks 文件,在 SpriteKit 中调用基于 GVC 的正确场景



我的GVC中有五个iPad场景和5个iPhone场景,我可以调用欢迎场景和Hud场景没有问题,但我无法复制其他场景的相同调用。我不知道它是否是大括号,但我似乎不能将其他iPad场景称为默认为iPhone场景。(相信我,当HUD出现时,我非常兴奋。有人可以就我的代码结构提供一些建议吗?请。。。。

import SpriteKit
class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
      if let scene = WelcomeScene(fileNamed:"WelcomeScene") {
        let skView = self.view as! SKView
        skView.showsFPS = GlobalData.Constant.DEV.DEBUG
        skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
        skView.ignoresSiblingOrder = true
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)

    }
        } else {
            if let scene = WelcomeScenePad(fileNamed: "WelcomeScenePad") {
                let skView = self.view as! SKView
                skView.showsFPS = GlobalData.Constant.DEV.DEBUG
                skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
                skView.ignoresSiblingOrder = true
                scene.scaleMode = .AspectFill
                skView.presentScene(scene)
                if let scene = HudScenePad(fileNamed: "HudScenePad") {
                    let skView = self.view as! SKView
                    skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
                    skView.ignoresSiblingOrder = true
                    scene.scaleMode = .AspectFill
                    skView.presentScene(scene)
                }

            } else  if let scene = WelcomeScene(fileNamed:"WelcomeScene") {
                let skView = self.view as! SKView
                skView.showsFPS = GlobalData.Constant.DEV.DEBUG
                skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
                skView.ignoresSiblingOrder = true
                scene.scaleMode = .AspectFill
                skView.presentScene(scene)
            }

        }

    }


    override func prefersStatusBarHidden() -> Bool {
        return false
    }
    override func shouldAutorotate() -> Bool {
        return true
    }
    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
            return .AllButUpsideDown
        } else {
            return .All
    }


}

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }
   }

这段代码让我知道游戏场景要到正确的sks文件,并在编辑器中打印值,以验证,这是在我的gameOver函数中。

  if (UIDevice.currentDevice().userInterfaceIdiom == .Pad ){
        if let _ = SceneTypePad(rawValue: fullSKSNameToLoad + String("Pad")) {
            fullSKSNameToLoad = "fileNamed" + "Pad"
            goToScenePad(SceneTypePad.DebateScene1Pad)
            print(("Went to DebateScenePad"))
            _ = SKTransition.fadeWithDuration(3)
            _ = DebateScene1Pad()

        }
    } else  if (UIDevice.currentDevice().userInterfaceIdiom == .Phone ){
        goToScene(SceneType.DebateScene1)
        (print("Went to DebateScenePhone"))
        _ = SKTransition.fadeWithDuration(3)
        _ = DebateScene1()
    }

三秒钟太长了,不能等待... :)

我需要创建一个新的静态变量来调用我的 GlobalData/Base Scene 文件中的 SKs pad 场景。菜鸟错误。当复制新文件的代码时,明智的词会仔细检查变量,当复制 swift 文件时。此外,让头脑休息一下是件好事,个人在编码 14 小时后无法保持注意力和敏锐......散步,用新鲜的头脑整理它。截止日期在这项业务中至关重要,但有时压力会带来可以轻松解决的愚蠢决定。

 static var previousScenePad:SceneTypePad?
 static var nextScenePad:SceneTypePad?
if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
if (UIDevice.currentDevice().userInterfaceIdiom == .Pad ){
  if let _ = SceneTypePad(rawValue: fullSKSNameToLoad + String("Pad")) {
        fullSKSNameToLoad = "fileNamed" + "Pad"
    }
} else  if (UIDevice.currentDevice().userInterfaceIdiom == .Phone ){

    }

在调用特定 SKS 文件时在 GVC 中工作。显然,它基于使用基类中定义的正确文件名"来呈现正确的视图,是的,我知道,有更好的方法来使用一个SKS文件,并使用相机节点来调整视图。在内容方面,拥有更多空间,它有机会以更多像素和更多空间创造不同的体验。资产同样重要,因为一开始我为每个设备调用了错误的资产,我决定硬编码,在不损失分辨率的情况下为我的外观设置比例因子。最终结果将是一个跨平台工作的通用应用程序。如果优化正确,即使我在应用程序捆绑包中添加了 5 个新场景,我也能够将 140mb 的应用程序压缩到 76mb。检查背景音乐、音效和 PNG 文件。将发射器限制为看起来不错的效果。您可以随时返回并在下一次更新中找到更干净的方法!!

最新更新