Übergeben des Level-Parameters beim Übergang zur nächsten Szene?
-
21-12-2019 - |
Frage
Ich versuche herauszufinden, wie man mit Spritebuilder und Cocos2D in Xcode am besten einen Level-Parameter zwischen Szenen übergeben kann.
Ich verwende den folgenden Standardcode, um zwischen Szenen zu wechseln.
[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];
Jede Hilfe wird sehr geschätzt.
Lösung
Unter der Annahme, dass die Gameplay.ccb
hat eine GameplayClass
als benutzerdefinierte Klasse zugewiesen, und diese Klasse hat eine Eigenschaft namens currentLevel
, können Sie auf die Instanz zugreifen und die Ebene wie folgt zuweisen:
CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
game.currentLevel = 3;
[[CCDirector sharedDirector] replaceScene:theScene];
Beachten Sie, dass zu der Zeit currentLevel
zugewiesen ist die GameplayClass
wird seine bereits ausgeführt haben init
und didLoadFromCCB
methoden, da das während passiert loadAsScene
.Wenn Sie eine weitere Überschreibung der Initialisierungsverarbeitung benötigen onEnter
in GameplayClass
:
-(void) onEnter
{
[super onEnter]; // must call super
switch (self.currentLevel)
{
// other switches omitted...
case 3:
// your level 3 code here
break;
}
}
Andere Tipps
In meinem Spiel (gemacht mit COCOS2D 2.0 + Cocosbuilder), fügte ich eine Klassenmethode loadWithLevelID:levelID
hinzu, um der Klasse GameObjectlayer, der die Gameplay-Elemente verwaltet:
So kann ich jetzt eine GameObjectlayer-Tippen erstellen
generasacodicetagpre.Das Hinzufügen einer "Last" -Methode an die Klassen, die CCBI-Dateien aufkarten, bietet folgende Vorteile:
- .
- Nur die Klasse kennt den Namen seiner zugehörigen CCBI-Datei.
- Die CCBI-Datei zum Erstellen einer bestimmten Klasse wird nur einmal im gesamten Projekt referenziert.
- Alle Logik, um ein Objekt einzurichten (z. B. vom Typ G1GameObjectlayer) ist im Objekt selbst.
Ich denke, Sie können einen ähnlichen Ansatz mit Ihrer CCScene-Unterklasse folgen.