2017-06-02 57 views
0

我想要將呈現的初始場景更改爲除默認GameScene類之外的另一個類。從閱讀其他問題,我明白我必須在這個部分從GameViewController改變:更改Swift中的初始遊戲場景

 if let scene = SKScene(fileNamed: "GameScene") { 
      print(scene) 
      // Set the scale mode to scale to fit the window 
      scene.scaleMode = .aspectFill 

      // Present the scene 
      view.presentScene(scene) 
     } 

所以GameScene.swift文件中我創建一個新的類:

class MainMenu : SKScene { 
    override func didMove(to view: SKView) { 
     print("At least it ran") 
     self.scene?.view?.presentScene(GameScene()) 
    } 
} 

然而,當我改變現場:

if let scene = SKScene(fileNamed: "MainMenu") 

當我運行該項目,它被卡住,但是當我用字符串「GameScene」來運行它,然後它完美的作品。我在加載MainMenu時出錯了嗎?

回答

0

在我看來,你應該將場景放在各自的文件...

你有MenuScene一個相應的SKS文件?您需要創建一個,如果你試圖用fileNamed:

  • 或加載它 -

使用此代碼來加載在代碼中創建的,而不是在場景編輯器SKScene文件

if let skView = self.view as? SKView { 

    if skView.scene == nil { 

     let scene = MenuScene(size: skView.bounds.size)   
     scene.scaleMode = .aspectFill 
     skView.presentScene(scene) 
    } 
} 

,然後在MenuScene文件,您需要一個init FUNC

init(size: CGSize) { 

    super.init(size: size) 

    name = "menuScene" 
} 
+0

您能否解釋爲什麼我應該使用viewVillLayoutSubviews()方法而不是viewDidLoad()來呈現MenuScene? – Pablo

+0

你可以在任何適合你遊戲的地方加載你的場景。我從遊戲中複製了我的代碼,需要從Layout中加載它。已經有很多解釋ViewController生命週期的例子https://stackoverflow.com/questions/13466189/should-i-initialize-my-viewcontroller-on-viewdidload-or-viewwilllayoutsubviews。我的例子中的重點不是集中在何處加載場景,而是如何加載場景。 –

+0

所以當我不創建SKS文件時,我需要調用初始化程序來設置大小? – Pablo