2

上下文

此問題與Swift: SKSpriteKit, using Storyboards, UIViewController and UIButton to set in game parameters?相關,並使用相同的M.W.E. (下方鏈接)。Swift:使用StoryBoards和UIViewControllers在GameScene中滿足條件後返回主菜單?

考慮看看我們看下面的Main.storyboardenter image description here

雖然這個故事板將允許人們從左至右通過點擊進度:

遊戲 - >(易/硬) - >GameScene

UIViewController - >MyUIViewController - >GameViewController

,由右點擊最後UIViewController上的UIButtonUILabel陳述「得分」,但沒有辦法從GameViewController到最後的UIViewController與「得分」UILabel

問題

鑑於GameScene過程中發生的某些事件,我怎麼能傳遞一些信息,從GameScene(例如分)和過渡到最後的最後UIViewController,使用戶可以重新開始遊戲。除了刪除GameViewController中的所有內容外,還有一些不可接近的GameScene的舊實例。

對於某些條件,讓我們點擊M.W.E中的紫色精靈。對於這些信息,讓它像是直到精靈被按下的時間一樣簡單,甚至只是一個隨機數。

最低工作實例

Stack Overflow SKSpriteKit

我的答案here - 這裏StackOverflow SKSpriteKit with Menu實現 - 表明,這是完全可能的,但貶謫一切SKView真是讓人不是使用storyboard。因此,如果可能,請保留與使用此混合storyboard - SKView方法有關的答案,以及如何讓GameScene調用「Score」 - UIViewController

+0

您是否熟悉委託模式?這是子視圖與父母溝通的常用方式。這[SO帖子](http://stackoverflow.com/questions/39561177/how-can-i-indicate-a-view-which-has-created-with-uikit-from-a-skscene/39564948#39564948)顯示了基本的想法並執行了放鬆的過程。委託協議可以擴展爲包含一個評分屬性,所以場景可以在值更改時通知它的ViewController。 –

+0

@MarkBrownsword沒有。我不是,你能否用這個M.W.E解釋它:https://github.com/SumNeuron/StackOverflow-SKSpriteKit-with-Menu – SumNeuron

回答

1

你可以使用你的下一個場景的userData實例屬性來存儲當前場景,一樣的東西:

nextScene.userData = NSMutableDictionary() 
nextScene.userData?.setObject(actualScore, forKey: "actualScore" as NSCopying) 

,當你在一個場景,你可以問這個的NSMutableDictionary誰是前一個場景如:

if let actualScore = self.userData?.value(forKey: "actualScore") { 
    print("well done!, the score was: \(actualScore)") 
}