Вот интересная дилемма.У меня есть два CCMenus, загружаемых на странице, каждый с двумя CCMenuItemImages в качестве кнопок.Все четыре кнопки вызывают одну и ту же функцию, которая решает, что делать, используя инструкцию switch, которая выходит за пределы значения тега вызывающего абонента.
Четыре кнопки - это start, обучающая программа, опции и кредиты.Я разделил их на два меню, чтобы я мог выровнять их по горизонтали и вертикали в искусственной сетке.Этот слой является слоем главного меню, поэтому он загружается первым после запуска игры.
Проблема в том, что при первой загрузке игры нажатие кнопки любая вызывает "параметры "кнопка.Не только функция, нажатие любой кнопки в меню активирует выбранное состояние кнопки выбора .Например, если я нажимаю «Пуск», выбранное состояние кнопки «Пуск» (свечение вокруг изображения) не работает - вместо этого светится кнопка настроек.
Как только я попадаю в меню параметров, а затем назадИсходя из этого, главное меню работает, как и ожидалось, каждая кнопка активирует свою функцию.
Следует отметить, что я также запустил чистую систему, удалил приложение из симулятора и из моего iPhone и перестроилэто.
Вот мой .h:
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "Constants.h"
#import "GameManager.h"
@interface MainMenuLayer : CCLayer {
CCMenu *mainMenuTop;
CCMenu *mainMenuBottom;
}
@end
А это мой .m:
#import "MainMenuLayer.h"
// Private methods
@interface MainMenuLayer()
- (void)displayMainMenu;
@end
@implementation MainMenuLayer
- (void)playScene:(CCMenuItemFont*) itemPassedIn {
if ([itemPassedIn tag] == 1) {
CCLOG(@"Tag 1 found, Scene 1");
[[GameManager sharedGameManager] runSceneWithID:kGameplayScene];
} else if ([itemPassedIn tag] == 2) {
CCLOG(@"Tag was: %d", [itemPassedIn tag]);
CCLOG(@"Placeholder for next chapters");
} else if ([itemPassedIn tag] == 3) {
CCLOG(@"Tag 3, Options");
[[GameManager sharedGameManager] runSceneWithID:kOptionsScene];
} else if ([itemPassedIn tag] == 4) {
CCLOG(@"Tag 4, Credits");
[[GameManager sharedGameManager] runSceneWithID:kCreditsScene];
}
}
- (void)displayMainMenu {
CGSize winSize = [CCDirector sharedDirector].winSize;
// Main Menu Top Layer Buttons
CCMenuItemImage *playGameButton = [CCMenuItemImage itemFromNormalImage:@"button-start-up.png" selectedImage:@"button-start-down.png" disabledImage:nil target:self selector:@selector(playScene:)];
[playGameButton setTag:1];
CCMenuItemImage *tutorialButton = [CCMenuItemImage itemFromNormalImage:@"button-tutorial-up.png" selectedImage:@"button-tutorial-down.png" disabledImage:nil target:self selector:@selector(playScene:)];
[tutorialButton setTag:2];
// Main Menu Bottom Layer Buttons
CCMenuItemImage *optionsButton = [CCMenuItemImage itemFromNormalImage:@"button-options-up.png" selectedImage:@"button-options-down.png" disabledImage:nil target:self selector:@selector(playScene:)];
[optionsButton setTag:3];
CCMenuItemImage *creditsButton = [CCMenuItemImage itemFromNormalImage:@"button-credits-up.png" selectedImage:@"button-credits-down.png" disabledImage:nil target:self selector:@selector(playScene:)];
[creditsButton setTag:4];
mainMenuTop = [CCMenu menuWithItems:playGameButton,tutorialButton,nil];
mainMenuBottom = [CCMenu menuWithItems:optionsButton,creditsButton,nil];
[mainMenuTop alignItemsHorizontallyWithPadding: 10.0f];
[mainMenuTop setPosition: ccp(winSize.width/2, -500)];
[mainMenuBottom alignItemsHorizontallyWithPadding:10.0f];
[mainMenuBottom setPosition:ccp(winSize.width/2, -600)];
id moveActionTop = [CCMoveTo actionWithDuration:0.5f position:ccp(winSize.width/2, 150)];
id moveEffectTop = [CCEaseIn actionWithAction:moveActionTop rate:1.0f];
[mainMenuTop runAction:moveEffectTop];
[self addChild:mainMenuTop z:2 tag:kMainMenuTagValue];
id moveActionBottom = [CCMoveTo actionWithDuration:0.5f position:ccp(winSize.width/2, 75)];
id moveEffectBottom = [CCEaseIn actionWithAction:moveActionBottom rate:1.0f];
[mainMenuBottom runAction:moveEffectBottom];
[self addChild:mainMenuBottom z:3 tag:kMainMenuBottomTagValue];
}
-(id)init {
self = [super init];
if (self != nil) {
[self displayMainMenu];
}
return self;
}
@end