【问题标题】:multiple sks files, calling proper scene based on GVC in SpriteKit多个sks文件,调用SpriteKit中基于GVC的合适场景
【发布时间】:2016-06-21 22:28:48
【问题描述】:

我的 GVC 中有五个 iPad 场景和 5 个 iPhone 场景 我有这个,我可以调用 Welcome Scene 和 Hud Scene 没问题,但我无法为其他场景复制相同的调用。我不知道它是否是花括号,但我似乎无法将其他 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()

    }

三秒太长了,不能等待顺便说一句... :)

【问题讨论】:

    标签: iphone swift ipad sprite-kit universal


    【解决方案1】:

    我需要创建一个新的静态变量来调用我的 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 文件,并使用相机节点来调整视图。当涉及到内容和拥有更多空间时,它提供了用更多像素和更多空间创造不同体验的机会。资产同样重要,因为一开始我为每个设备调用了错误的资产,我决定硬编码,我的外观的比例因子不丢失分辨率。最终结果将是一个跨平台运行的通用应用程序。如果优化得当,我可以将 140mb 的应用程序压缩到 76mb,即使我在我的应用程序包中添加了 5 个新场景。检查您的背景音乐、音效和 PNG 文件。将发射器限制为看起来不错的效果。您可以随时返回并在下一次更新中找到更清洁的方法!!!

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多