2017-03-08 1 views
1

Ich erstelle ein levelbasiertes Spiel mit zwei SKSpriteNodes als Schaltflächen, um entweder auf die nächste oder vorherige Ebene zu gelangen, wodurch der GameViewController eine neue Szene präsentiert. Ich habe der SKScene eine Eigenschaft gegeben, die direkt auf den gameviewController verweist, um eine aktuelle neue Szenenfunktion aufzurufen, aber nach meinem Verständnis bricht das MVC-Modell. Ist das schlecht? Was ist eine Alternative?SpriteKit Spiellogik

Antwort

7

Die Standardalternative für iOS-Programmierung ist ein Muster namens Delegierung. Zunächst erstellen Sie ein Protokoll, um die Implementierung von Switching-Ebenen wegzuspulen.

protocol LevelSelector: class { 
    func didSelectNextLevel(from scene: SKScene) 
    func didSelectPreviousLevel(from scene: SKScene) 
} 

Die GameViewController implementiert dieses Protokoll, um die Szene für die entsprechende Ebene zu ändern. Jede Szene eine Ebene der Umsetzung hat:

weak var levelSelector: LevelSelector? 

Die GameViewController setzt sich dann als levelSelector für jede Ebene Szene:

scene.levelSelector = self 

Wenn der Benutzer tippt auf den SKNode s die nächsten und vorherigen Ebene Tasten darstellt, Rufen Sie die entsprechende Methode an:

levelSelector?.didSelectNextLevel(from: self) 

//OR 

levelSelector?.didSelectPreviousLevel(from: self)