2011-04-13 12 views
6

Estoy tratando de inicializar una escena en cocos2d (versión 0.99.5) y quiero pasar un parámetro. En este caso, el parámetro es un valor int correspondiente al número de nivel. La propia clase escena es una subclase de CCLayer, y estoy inicializarlo con el método de la clase nodo:Inicializar escena en cocos2d con el parámetro

GameScene *scene = [GameScene node]; //GameScene subclass of CCLayer 

Tengo un método init personalizado que lleva el "nivel" variables, de la siguiente manera:

- (id) initWithGameLevel:(int)level { 
    if ((self = [super init])){ 
     // etc 
    } 
} 

Solo me pregunto: ¿estoy fuera de lugar en mi enfoque al crear mi propio método initWithX y cómo inicializaría la escena con el entero de nivel?

+0

sugerencia a Jim si se trata de una subclase de CCLayer entonces su nombre de la clase debe ser GameLayer como GameScene se ve como una subclase de CCScene –

+0

Esa es una gran sugerencia. ¡Gracias! –

Respuesta

19

Añadir este método para la subclase

+(id)nodeWithGameLevel:(int)level{ 
    return [[[self alloc] initWithGameLevel:level] autorelease]; 
} 

y en lugar de

GameScene *scene = [GameScene node]; 

escritura

GameScene *scene = [GameScene nodeWithGameLevel:levelNumber]; 
+0

Es una cosa de belleza. Me doy cuenta de que esto es algo bastante básico en Objective-C. Todavía no estoy seguro de lo que está sucediendo, pero esta respuesta es una buena ruta de exploración para seguir. Gracias, Inder. –

+0

Gracias Jim. :) ... –

+0

@JimMcGaw, Inder está agregando un método de clase utilizando la convención Cocos2d del "nodo esperado", pero siguiendo el patrón de los inicializadores designados y por defecto. Para su próximo "breadcrumb" ...;) –