как изменить изображения блокировки, чтобы разблокировать изображения в cocos2d - PullRequest
5 голосов
/ 25 января 2011

У меня игра с 10 уровнями. Я хочу изменить изображение блокировки второго уровня, чтобы разблокировать, когда первый уровень завершен.

Я использую 20 изображений (10 заблокировано и 10 разблокировано).

Я использую меню cc для отображения количества изображений. например (код): -

 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];

я использую код ниже для запоминания пройденного уровня.

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

** Теперь, как изменить блокировку для разблокировки изображений.

(если я делаю здесь неправильно), есть другой способ решения проблемы, обеспечивающий это Я должен реализовать это. **

Ответы [ 6 ]

6 голосов
/ 14 февраля 2011

Вы можете установить disabledImage при создании каждого CCMenuItemImage:

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

Затем просто переключите состояние кнопки в соответствии с запросом:

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

Cocos меняет изображения для вас.

2 голосов
/ 22 февраля 2011

У меня такая же идея в одной из моих игр. Я решил это с помощью отдельной блокировки и сделал значки, которые я поместил в верхней части каждого пункта меню, который представляет уровень.

Просто создайте свои пункты меню как обычно. Не пытайтесь представлять заблокированные или готовые состояния с помощью значка пункта меню. Вместо этого создайте меньшие заблокированные и готовые значки, которые вы будете создавать как спрайты и позиции в верхней части каждого пункта меню.

Вот соответствующая часть метода init моего слоя меню (я использую атлас спрайтов для хранения всех моих изображений):

// 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++];
}

и мой вспомогательный метод badgeIconFromFrame выглядит следующим образом:

- (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 голосов
/ 27 апреля 2011

Просто используйте [menuItem setNormalImage: lockedButton];

LockedButton - это еще один CCMenuItemImage с новым файлом.

0 голосов
/ 22 февраля 2011

вы пытались использовать db (sqlite) для хранения значений заблокированных или разблокированных Это определенно будет работать. Но это большой процесс.

0 голосов
/ 26 января 2011

Не уверен, работает ли он:

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];
}
0 голосов
/ 25 января 2011

Как насчет (void) - setIsEnabled: метода CCMenuItem?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...