2014-11-05 75 views
12

我一直在玩SpriteKit,並且對於如何從代碼中驅動它有着相當不錯的感覺,但是對於關卡編輯器我感到非常困惑包括在Xcode 6中。SpriteKit模板中的GameScene.swift和GameScene.sks文件之間的關係是什麼

我觀看過wwdc視頻(「平臺狀態​​聯盟」和「spriteKit中有什麼新內容」),並在網絡上搜索,但一直未能找到關於級別的編輯器,以及它真的在做什麼。

我不明白,模板設置的兩個文件是如何相關的? .sks文件是GameScene.swift文件的表達式,還是它包含的GameScene類?

或者它們都只是持有將在同一場景中一起玩的單獨對象/節點?

或者(這是我最好的解釋)是.sks文件和編輯器基本上是爲了讓響應角色能夠「活」的環境?如果這是真的,.swift文件中的代碼如何與.sks文件中的內容相關聯?

回答

23

.sks文件是場景內容的靜態存檔。如果您以前使用過Interface Builder來設置UI應用程序,那麼它的思路也是一樣的,如果在實現上有所不同的話。

在UI的應用程序,你可以在代碼中所做的一切:

override func viewDidLoad() { 
    let someText = UITextField(...) 
    let aButton = UIButton(...) 
    // ... position everything 
    // ... style everything 
    // ... etc ... 
} 

或者你可以做IB所有的靜態內容設置(一XIB或情節串連圖板),並且只用於建立動態使用代碼你的應用程序的行爲 - 當有人開始觸摸這些按鈕時發生的事情。當你這樣做時,你編寫代碼的視圖控制器作爲代理對象存在於xib/storyboard中,在你在IB中設置的內容和代碼中設置的內容之間架起一座橋樑。

在SpriteKit中,您有相同的選擇。 Xcode的6之前,許多SK遊戲把所有的代碼方法:

override func didMoveToView(view: SKView) { 
    let player = PlumberSprite(color: .Red) 
    player.position = // ... 
    player.physicsBody = // ... 
    self.addChild(player) 
    let ground = SKSpriteNode(...) 
    ground.position = // ... 
    ground.physicsBody = // ... 
    self.addChild(ground) 
    let block = QuestionBlockSprite() 
    block.position = // ... 
    block.physicsBody = // ... 
    block.contents = CoinSprite() 
    self.addChild(block) 
    // ... etc etc etc ... 
} 

這是一個很大的什麼是最終的圖形,靜態場景碼 - 你開始添加代碼,使之成爲一個遊戲,甚至之前(輸入處理,敵人的行爲,增加分數或去遊戲結束的物理回調等)。而且它不適合設計從內容中分離出一般遊戲邏輯的地方,因此很難在遊戲中添加多個關卡。相反,您可以使用Xcode中的SpriteKit編輯器來構建您的靜態內容(級別),並堅持用於動態行爲和遊戲邏輯的代碼。就像在IB中視圖控制器是你的故事板和你的代碼之間的橋樑一樣,你的場景類(模板中的GameScene.swift)是編輯器和代碼之間的橋樑。當您在運行時加載.sks文件(代碼爲模板中的GameViewController.swift)時,它將成爲GameScene類的一個實例,您在編輯器中設置的任何內容都可以作爲場景的子節點進行訪問。

檢查WWDC會談是一個好主意,但是您錯過了一個涵蓋此內容的主題:請參閱session 608: Best Practices for Building SpriteKit Games以獲取更多關於SpriteKit編輯器背後的動機,如何使用它以及如何處理從您場景代碼中的.sks文件。

+0

非常好!該視頻的前20分鐘正是我需要的! – 2014-11-05 23:00:55

+0

我發現.sks文件有一點限制。它有時似乎會丟失我添加的對象,有時它會恢復我所做的更改(模擬與編輯模式)。沒有圖層視圖,我不知道這個.sks文件是多麼有用,除非Apple添加更多功能。您必須向前和向後推節點才能處理複雜的層次結構。 – 2015-01-28 17:01:53

相關問題