Niveau de passage de paramètres lors de la transition vers la Scène suivante?
-
21-12-2019 - |
Question
Je suis à essayer de comprendre la meilleure façon de passer un paramètre de niveau entre les Scènes à l'aide de Spritebuilder et Cocos2D dans Xcode.
Je suis à l'aide du code ci-dessous à la transition entre les scènes.
[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];
Toute aide sera très appréciée.
La solution
En supposant que le Gameplay.ccb
a un GameplayClass
affecté comme ses personnalisé en classe, et que la classe possède une propriété nommée currentLevel
, vous pouvez accéder à l'instance et affecter le niveau de la façon suivante:
CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
game.currentLevel = 3;
[[CCDirector sharedDirector] replaceScene:theScene];
Noter que par le temps currentLevel
est attribuée à l' GameplayClass
ont déjà exécuter ses init
et didLoadFromCCB
les méthodes de depuis que se passe au cours de loadAsScene
.Si vous avez besoin de plus d'init de traitement de remplacer onEnter
dans GameplayClass
:
-(void) onEnter
{
[super onEnter]; // must call super
switch (self.currentLevel)
{
// other switches omitted...
case 3:
// your level 3 code here
break;
}
}
Autres conseils
Dans mon jeu (fait avec Cocos2D 2.0 + Cocosbuilder) J'ai ajouté une méthode de classe loadWithLevelID:levelID
à la classe GameObjectLayer qui gère les éléments de jeu:
@implementation GameObjectLayer {
G1LevelID * _levelID;
}
// load a Luminetic Land game object layer
+ (instancetype)loadWithLevelID:(G1LevelID*)levelID {
NSString * levelFileName = ... builds levelFileName from levelID;
GameObjectLayer * gol = (GameObjectLayer*) [CCBReader nodeGraphFromFile:levelFileName];
[gol setLevelID:levelID];
return gol;
}
- (void)setLevelID:(G1LevelID*)levelID {
_levelID = levelID;
}
Alors maintenant, je peux créer une prise de jeu à GameObjectLayer
GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];
En général, l'ajout d'une méthode "chargée" aux classes que la carte des fichiers CCBI offre les avantages suivants:
- Seule la classe connaît le nom de son fichier CCBI associé.
- Le fichier CCBI pour créer une classe donnée n'est référencé qu'une fois dans l'ensemble du projet.
- Toute la logique pour configurer un objet (par exemple de type G1GameObjectLayer) est à l'intérieur de l'objet lui-même.
Je pense que vous pouvez suivre une approche similaire avec votre sous-classe CCscene.