Iphone 如何在cocos2d中将锁定图像更改为解锁图像

Iphone 如何在cocos2d中将锁定图像更改为解锁图像,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我正在玩10级的游戏。我想将第二级锁定图像更改为在第一级完成时解锁 am使用20个图像(10个锁定和10个解锁) am使用cc菜单显示数字图像。 例如(代码):- 我使用下面的代码来记住已完成的级别 int lastLevelCompleted= [[NSUserDefaults standardUserDefaults] integerForKey:@"levelCompleted"]; if(currentLevel >lastLevelCompleted){ NS

我正在玩10级的游戏。我想将第二级锁定图像更改为在第一级完成时解锁

am使用20个图像(10个锁定和10个解锁)

am使用cc菜单显示数字图像。 例如(代码):-

我使用下面的代码来记住已完成的级别

 int lastLevelCompleted= [[NSUserDefaults standardUserDefaults] integerForKey:@"levelCompleted"];
    if(currentLevel >lastLevelCompleted){
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     [defaults setInteger:currentLevel forKey:@"levelCompleted"];
**现在,如何更改锁定以解锁图像

(如果我在这里做错了)有其他的方法来解决这个问题。我必须实现它。**

关于
(void)-setIsEnabled:
CCMenuItem的方法如何?

不确定它是否有效:

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

创建每个
CCMenuItemImage
时,可以设置
disabledImage

// 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为您交换图像。

您是否尝试使用db(sqlite)存储锁定或解锁的值。 这肯定会奏效的。
但这是一个很大的过程。

我在我的一个游戏中也有同样的想法。我用单独的锁定和完成图标解决了这个问题,我将这些图标放置在代表一个级别的每个菜单项的顶部

只需正常创建菜单项即可。不要试图用菜单项的图标表示锁定或完成状态。相反,创建一个较小的锁定和完成图标,将其实例化为精灵,并放置在每个菜单项的顶部

下面是我的菜单层的init方法的相关部分(我使用一个sprite atlas来存储我的所有图像):

我的助手方法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];   
}

只需使用[menuItem setNormalImage:lockedButton]

LockedButton是另一个带有新文件的CCMenuItemImage

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