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.

Était-ce utile?

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:

  1. Seule la classe connaît le nom de son fichier CCBI associé.
  2. Le fichier CCBI pour créer une classe donnée n'est référencé qu'une fois dans l'ensemble du projet.
  3. Toute la logique pour configurer un objet (par exemple de type G1GameObjectLayer) est à l'intérieur de l'objet lui-même.
  4. Je pense que vous pouvez suivre une approche similaire avec votre sous-classe CCscene.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top