2011-01-25 79 views
5

上面有10個級別的遊戲。我想在第一級完成時更改第二級鎖定圖像以解鎖。如何更改鎖定圖像以解鎖cocos2d中的圖像

上午使用20個圖像(10鎖定和10解鎖)。

am使用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"]; 

**現在,如何更改鎖定來解鎖圖像。

(如果我在這裏做錯了)有其他解決方法提供的方式。我必須執行那一個。 **

回答

2

我在我的一個遊戲中有同樣的想法。我用獨立的鎖解決了它,並完成了我在每個代表關卡的菜單項上放置的圖標。

只需正常創建菜單項即可。不要嘗試用菜單項的圖標表示鎖定或已完成的狀態。相反,創建一個更小的鎖定的完成圖標,你將實例化爲精靈和位置在每個菜單項上。

這裏是我的菜單層的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

怎麼樣(void) - setIsEnabled: CCMenuItem的方法?

0

不知道它的工作原理:

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

你可以設置一個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]; 

科科斯爲您交換圖像。

0

是否嘗試使用db(sqlite)來存儲鎖定或解鎖的值。 它肯定會工作。 但這是一個很大的過程。

0

只需使用[menuItem setNormalImage:lockedButton];

LockedButton是具有新文件的另一個CCMenuItemImage。