2017-03-08 131 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)