Ich arbeite an einem SceneKit-Spiel mit Swift, und ich denke über die beste Möglichkeit, die verschiedenen Bildschirme/Zustände um die eigentliche Hauptspielszene zu organisieren. Ich habe einen einfachen Prototyp, die aus drei Staaten bestehen:Architektur eines SceneKit-Spiels, mehrere View-Controller für Menübildschirme?
- Splash Screen (Spielart wählen) ->
- Spiel ->
- Spiel über Bildschirm (wählen, wieder zu spielen oder Rückkehr zu spritzen)
In dem Prototyp entschied ich mich für UIKit, um die UI-Elemente zu tun, anstatt eine SpriteKit Overlay. Obwohl es im Moment nur Schaltflächen sind, was in SpriteKit leicht genug wäre, möchte ich in Zukunft vielleicht Schieberegler hinzufügen (zB einen Optionen-Bildschirm, um die Steuerempfindlichkeit einzustellen), Texteingabe usw., und dann wirst du große Brocken neu erstellen von Uikit.
So hat derzeit jede der 3 oben beschriebenen Szenen ihre eigene UIViewController
. Die Splash und Game ViewControllers haben ihre eigenen s und SCNScene
s, und der GameOver ist ein Modal, das über die Hauptspielszene anzeigt.
Diese Struktur ist nicht wirklich ideal, da es bedeutet, dass das Hauptspiel SCNScene immer dann neu geladen wird, wenn die viewDidLoad
der GameViewController
feuert. Die Haupt-SCNScene
ist ziemlich detailliert, dauert also ein paar Sekunden zu laden, und mit wiederholten Zyklen scheint dies Speicherprobleme zu schaffen. Nach 2 Zyklen Splash -> Spiel -> GameOver bekomme ich eine Speicherwarnung, und nach dem dritten Zyklus verliert Xcode die Verbindung zum iPhone (was meiner Erfahrung nach durch Speicherprobleme verursacht zu sein scheint).
Ich hätte gerne eine Haupt GameViewController
, die die am häufigsten wiederverwendeten Assets einmal lädt, aber immer noch in der Lage sein, zwischen den verschiedenen Menübildschirmen zu wechseln.
Was sind die Optionen hier?
Ich dachte, vielleicht könnte ich eine Haupt GameViewController
haben, die das Laden und Entladen von SceneKit-Assets steuert und die einzige SCNView
hat. Ihre Methode viewDidLoad
würde nur einmal ausgelöst, wenn die App zum ersten Mal gestartet wird. Dann würde jede der anderen Ansichten eine sehr minimale UIViewController
haben, die als Modals über den Haupt-GameViewController mit "OverCurrentContext" ausgewählt würde.
Ich wollte fragen, ob dieses Muster machbar klingt und wie andere ihre SceneKit-Spiele organisieren. Ich bin noch immer ziemlich neu in der Entwicklung von iOS, daher könnte es sein, dass mir ein grundlegendes Spieldesign fehlt.
Vielen Dank für das versuchen. Interessant ist, dass Sie keine neue Szene in eine Ansicht laden konnten. Haben Sie [presentScene: withTransition] versucht (https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/index.html#//apple_ref/occ/intfm/SCNSceneRenderer/presentScene:withTransition:incomingPointOfView : FertigstellungHandler :)? "Verwenden Sie diese Methode, um die in einer SceneKit-Ansicht (oder einem anderen Renderer) angezeigte Szene mit einem animierten Übergang zu ändern." – OliverD