我正在使用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"];
**现在,如何更改锁定以解锁图像。
(如果我在这里做错了)还有其他解决方法提供的方法。我必须实现那个。 **
答案 0 :(得分: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];
Cocos为您交换图像。
答案 1 :(得分: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];
}
答案 2 :(得分:0)
CCMenuItem的(void) - setIsEnabled:
方法怎么样?
答案 3 :(得分: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];
}
答案 4 :(得分:0)
您是否尝试使用db(sqlite)来存储已锁定或未锁定的值。 它肯定会奏效。 但这是一个很大的过程。
答案 5 :(得分:0)
只需使用[menuItem setNormalImage:lockedButton];
LockedButton是另一个带有新文件的CCMenuItemImage。