2011-01-25 12 views
5

estoy teniendo juego con 10 niveles. Quiero cambiar la imagen de bloqueo de segundo nivel para desbloquear cuando se completa el primer nivel.cómo cambiar las imágenes de bloqueo para desbloquear imágenes en cocos2d

estoy usando 20 imágenes (10 bloqueadas y 10 desbloqueadas).

estoy usando menús de cc para mostrar las imágenes numéricas. por ejemplo (código): -

CCMenuItemImage *startButton12 = [CCMenuItemImage itemFromNormalImage:@"ten_new-lock.png" 
     selectedImage:@"ten_new-lock.png" target:self 
     selector:@selector(ten:)]; 

    menu1 = [CCMenu menuWithItems: startButton3,startButton4,startButton5,startButton6,startButton7,startButton8,startButton9,startButton10,startButton11,startButton12, nil]; 
     menu1.position = ccp(240,30); 
     [menu1 alignItemsHorizontally]; 
     [menuLayer1 addChild: menu1]; 

am mediante el siguiente código para recordar el nivel completado.

int lastLevelCompleted= [[NSUserDefaults standardUserDefaults] integerForKey:@"levelCompleted"]; 
    if(currentLevel >lastLevelCompleted){ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setInteger:currentLevel forKey:@"levelCompleted"]; 

** ahora, cómo cambiar el candado para desbloquear imágenes.

(si estoy haciendo mal aquí) hay otra manera de resolver los medios que proporcionan eso. Tengo que implementarlo. **

Respuesta

2

que tienen la misma idea en uno de mis juegos. Lo resolví con iconos de bloqueo e iconos separados que he colocado en la parte superior de cada elemento del menú que representa un nivel.

Basta con crear los elementos de menú normalmente. No intente representar estados bloqueados o realizados con el icono del elemento de menú. En su lugar, cree un y más pequeños que creará como sprites y los colocará en la parte superior de cada elemento del menú.

Aquí es la parte correspondiente del método init de mi capa de menú (estoy usando un atlas de sprites para almacenar todos mis imágenes):

// I save the state of each level as a character in a NSMutableString: 
self.completedState = 0x0043; // "C" (Completed) 
self.openState = 0x004f; // "O" 
self.lockedState = 0x004c; // "L" 
self.dungeonAvailabilityState = @"COLLLLLLLLLLLLLLLL"; // in reality I get this string from a global object 

// calc the position for the dungeon icon at row, column 
x = (column*56)+148; 
y = 244-(row*56); 

// get the dungeon state 
stateIndex = (row*columns)+column; 
dungeonState = [self.dungeonAvailabilityState characterAtIndex:stateIndex]; 


// calc the position of the badges using offset from the menu item's icon 
lockedX = x - DungeonsScreen_BadgeXoffset; 
lockedY = y - DungeonsScreen_BadgeYoffset; 
doneX = x - DungeonsScreen_BadgeXoffset; 
doneY = y + DungeonsScreen_BadgeYoffset; 

if (dungeonState == self.lockedState) { 
// add the lock icon 
[super badgeIconFromFrame:@"icon_lock.png" xPos:lockedX yPos:lockedY spriteTag:t++]; 
} 

y mi método de ayuda badgeIconFromFrame se ve así:

- (void) badgeIconFromFrame:(NSString*)spriteName xPos:(float)x yPos:(float)y spriteTag:(int)t { 
     CCLOG(@"%@: %@", NSStringFromSelector(_cmd), self); 

     CCSprite* badgeSprite = [CCSprite spriteWithSpriteFrameName:spriteName]; 
     badgeSprite.position = CGPointMake(x, y); 
     [self addChild:badgeSprite z:zIndexDecoration tag:t]; 
} 
0

¿Qué pasa con (void) - setIsEnabled: método de CCMenuItem?

0

No estoy seguro si funciona:

if(unlock){ 
[menuLayer1 removeChild: menu1 cleanup:YES]; 

CCMenuItemImage *startButton12 = [CCMenuItemImage itemFromNormalImage:@"ten_new-unlock.png" 
    selectedImage:@"ten_new-unlock.png" target:self 
    selector:@selector(ten:)]; 

menu1 = [CCMenu menuWithItems: startButton3,startButton4,startButton5,startButton6,startButton7,startButton8,startButton9,startButton10,startButton11,startButton12, nil]; 
    menu1.position = ccp(240,30); 
    [menu1 alignItemsHorizontally]; 
    [menuLayer1 addChild: menu1]; 
} 
else 
{ 
CCMenuItemImage *startButton12 = [CCMenuItemImage itemFromNormalImage:@"ten_new-lock.png" 
    selectedImage:@"ten_new-lock.png" target:self 
    selector:@selector(ten:)]; 

menu1 = [CCMenu menuWithItems: startButton3,startButton4,startButton5,startButton6,startButton7,startButton8,startButton9,startButton10,startButton11,startButton12, nil]; 
    menu1.position = ccp(240,30); 
    [menu1 alignItemsHorizontally]; 
    [menuLayer1 addChild: menu1]; 
} 
6

podría establecer un disabledImage cuando se crea cada CCMenuItemImage:

// create items by delclaring also a "disabled" image 
CCMenuItemImage *menuItem = [CCMenuItemImage itemFromNormalImage:normalImage 
                selectedImage:selectedImage 
                disabledImage:disabledImage 
                  target:self 
                 selector:@selector(callbackMethod)]; 

A continuación, sólo cambiar el estado del botón conforme a lo solicitado:

// then just use setIsEnabled to switch the state 
[menuItem setIsEnabled:NO]; 

Cocos intercambia las imágenes para usted.

0

intenté utilizar db (sqlite) para almacenar el valor de bloqueado o desbloqueado. Definitivamente funcionará. Pero es un gran proceso.

0

Sólo tiene que utilizar [menuItem setNormalImage: lockedButton];

LockedButton siendo otro CCMenuItemImage con un nuevo archivo.

Cuestiones relacionadas