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