2017-03-08 9 views
1

2つの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)