2016-05-23 76 views
0

使用Xcode時,我遇到了令人討厭的問題,即單擊.SKS文件時Xcode總是崩潰。我在這裏提出了問題,甚至在Apple開發者論壇上也提到了問題,並且在互聯網上搜索瞭解決方案......但是這是無望的。如何爲我的新.sks文件創建.swift文件?

因爲我製作的遊戲中有很多場景,所以如果我不能使用SpriteKit編輯器以簡單的方式與場景交互,我想知道如何通過編碼他們的.swift文件來與我的場景進行交互。

所以問題是,例如,當我創建一個文件「EndScene.sks」時,如何創建一個「EndScene.swift」,它與我的.sks文件鏈接?

非常感謝!

回答

4

創建一個新的swift文件並將其命名爲與.sks文件相同。假設您有一個名爲MainMenu.sks的.sks文件。您會創建一個名爲MainMenu.swift的快速文件。在該文件中,您需要創建一個繼承自SKScene的Main Menu類。

import SpriteKit 

class MainMenu: SKScene { 

} 

裏面有你會把你的所有代碼。正如你所說的,關鍵是將它鏈接到.sks文件。

當你去演示你的場景時,你將實例化這個類並將它與.sks文件關聯起來。

import UIKit 
import SpriteKit 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let scene = MainMenu(fileNamed:"MainMenu") { 
      let skView = self.view as! SKView 
      // Some settings applied to the scene and view 
      // ... code ... 

      skView.presentScene(scene) 
     } 
    } 
//... other code 
} 

注行let scene = MainMenu(fileNamed:"MainMenu")。那就是你實例化你在MainMenu.swift.中創建的類的地方所以,在技術上,MainMenu().swift文件,而fileNamed: "MainMenu".sks文件。您可以在技術上將任何.sks文件放入init調用中,並且它將渲染該場景。

想象一下,擁有一個迷宮亞軍的所有邏輯的遊戲。您可以在一個名爲MazeScene的類中構建所有遊戲邏輯,並製作一組.sks文件,每個文件都有不同的迷宮。那麼你可以這樣,MazeScene(fileNamed: "MazeOne")MazeScene(fileNamed: "MazeThree")

有關此文檔,SKScene從SKNode繼承,所以你會發現init(fileNamed:) here

這應該讓你去的文檔。

+0

旁註:我在使用場景編輯器時也遇到很多崩潰。這對於一些溫和的設計工作很好,但我發現自己在代碼中完成所有更詳細的工作。 –

+0

爲什麼它「重寫func viewDidLoad()」不是「重寫func didMoveToView(view:SKView)」? –

+0

這是根視圖控制器。每個SpriteKit遊戲至少有一個。如果你在一個'SKScene'實例中做這個,你可以做一些類似'self.view!.presentScene(scene,transition:transition)'的地方,其中'scene'是'let scene = MainMenu(fileNamed:「MainMenu」) ' –

1

因此,而不是評論我不得不漫步,因爲StackOverflow不會讓我評論,這有多相同在swift 3?而當你在UIViewController中這樣做,你說

if let scene = MainMenu(fileNamed:"MainMenu") { 
     let skView = self.view as! SKView 
     // Some settings applied to the scene and view 
     // ... code ... 

     skView.presentScene(scene) 
    } 

你是什麼意思

// ... code ... 

難道我們把所有我們會放在SKScene類在那裏,而不是代碼是什麼意思?我認爲整個問題是有一個單獨的SKScene類。當我嘗試這樣的SKScene類我沒有加載。謝謝任何澄清和抱歉,我必須回答,而不是評論。這是非常愚蠢的,你需要50聲望留下評論我沒有看到任何點。不管怎樣,謝謝!