Cocos2d - CCMenu с несколькими кнопками вызывает неправильный селектор при первой загрузке - PullRequest
1 голос
/ 01 февраля 2012

Вот интересная дилемма.У меня есть два 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

1 Ответ

0 голосов
/ 03 февраля 2012

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

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