2017-03-08 223 views
1

我使用兩個SKSpriteNodes作爲按鈕創建一個基於水平的遊戲,以進入下一個或上一個級別,這會導致GameViewController呈現一個新場景。我讓SKScene擁有一個直接引用gameviewController來調用當前新場景函數的屬性,但是據我所知,這打破了MVC模型。這不好嗎?什麼是替代方案?SpriteKit遊戲邏輯

回答

7

iOS編程的標準替代方法是一種稱爲委派的模式。首先,創建一個協議來抽象出交換級別的實現。

protocol LevelSelector: class { 
    func didSelectNextLevel(from scene: SKScene) 
    func didSelectPreviousLevel(from scene: SKScene) 
} 

GameViewController實現此協議改變到現場爲適當的水平。實施電平的每個場景具有:

weak var levelSelector: LevelSelector? 

GameViewController然後本身設置爲levelSelector每個級別場景:

scene.levelSelector = self 

當用戶點擊表示下一個和前一個電平按鈕SKNode S,請撥打相應的方法:

levelSelector?.didSelectNextLevel(from: self) 

//OR 

levelSelector?.didSelectPreviousLevel(from: self)