SpriteKit游戏逻辑

Muf*_*497 1 sprite-kit swift

我正在创建一个基于关卡的游戏,使用两个SKSpriteNodes作为按钮进入下一个或上一个级别,这将导致GameViewController呈现一个新场景.我让SKScene有一个直接引用gameviewController的属性,以便调用一个现在的新场景函数,但据我所知,这打破了MVC模型.这不好吗?有什么选择?

Dav*_*ton 7

iOS编程的标准替代方案是称为委派的模式.首先,您创建一个协议来抽象出切换级别的实现.

protocol LevelSelector: class {
    func didSelectNextLevel(from scene: SKScene)
    func didSelectPreviousLevel(from scene: SKScene)
}
Run Code Online (Sandbox Code Playgroud)

GameViewController实现了该协议,以更改到现场为适当的水平.实现一个级别的每个场景都有:

weak var levelSelector: LevelSelector?
Run Code Online (Sandbox Code Playgroud)

GameViewController随后本身设置为levelSelector每个级别的一幕:

scene.levelSelector = self
Run Code Online (Sandbox Code Playgroud)

当用户点击SKNode表示下一级和上一级按钮的s时,请调用适当的方法:

levelSelector?.didSelectNextLevel(from: self)

//OR

levelSelector?.didSelectPreviousLevel(from: self)
Run Code Online (Sandbox Code Playgroud)