Pasando a Nivel de parámetro cuando la transición a la siguiente Escena?
-
21-12-2019 - |
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.
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:
- Solo la clase conoce el nombre de su archivo CCBI relacionado.
- El archivo CCBI para crear una clase dada se hace referencia solo una vez en todo el proyecto.
- Toda la lógica para configurar un objeto (por ejemplo, de tipo g1gameObjectlayer) está dentro del objeto en sí.
Creo que puede seguir un enfoque similar con su subclase CCSCENE.