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)