Pregunta

Estoy tratando de averiguar la mejor manera de pasar un parámetro de nivel entre Escenas con Spritebuilder y Cocos2D en Xcode.

Estoy usando el código estándar por debajo de la transición entre escenas.

[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];

Cualquier ayuda será muy apreciada.

¿Fue útil?

Solución

Suponiendo que el Gameplay.ccb tiene un GameplayClass asignado como su costumbre de clase, y que clase tiene una propiedad denominada currentLevel, puede acceder a la instancia y asignar el nivel de la siguiente manera:

CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
game.currentLevel = 3;

[[CCDirector sharedDirector] replaceScene:theScene];

Tenga en cuenta que por el momento currentLevel se le asigna el GameplayClass se han llevado a cabo su init y didLoadFromCCB métodos desde que ocurre durante el loadAsScene.Si necesita más init procesamiento de reemplazar onEnter en GameplayClass:

-(void) onEnter
{
    [super onEnter]; // must call super

    switch (self.currentLevel)
    {
        // other switches omitted...

        case 3:
            // your level 3 code here
            break;
    }
}

Otros consejos

En mi juego (hecho con Cocos2D 2.0 + CocosBuilder) agregué un método de clase GeneracDicetAcode a la clase GameObjectlayer que administra los elementos de juego:

@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;
}

Así que ahora puedo crear una mecanografía de GameObjectSayer

GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];

En general, agregando un método de "carga" a las clases que los archivos de MAP CCBI ofrecen los siguientes beneficios:

  1. Solo la clase conoce el nombre de su archivo CCBI relacionado.
  2. El archivo CCBI para crear una clase dada se hace referencia solo una vez en todo el proyecto.
  3. Toda la lógica para configurar un objeto (por ejemplo, de tipo g1gameObjectlayer) está dentro del objeto en sí.
  4. Creo que puede seguir un enfoque similar con su subclase CCSCENE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top