CCMenu не работает в iPad - PullRequest
       17

CCMenu не работает в iPad

0 голосов
/ 16 ноября 2010

Я создаю универсальное приложение, и мое CCMenu прекрасно работает как на iPhone, так и на iPhone 4 и iPad.Однако при нажатии на iPad кнопки ничего не делают.

У меня нет специального кода iPad, кроме изменения свойства contentScaling, чтобы iPad использовал те же изображения, что и iPhone 4. Это означает, что те же изображения работают наiPhone 4, но не на iPad.

Я использую cocos2d 0.99.rc0 и iOS 4.1 SDK.Я даже не знаю, с чего начать устранение неполадок.

Единственная странность, которую я недавно заметил, заключается в том, что iPad, кажется, рисует сцену меню один раз, а затем быстро перерисовывает ее по некоторым причинам, перемещая все на один пиксель или что-то еще.,Мой класс меню очень прост и не имеет «обновляющего» кода или чего-либо, что должно быть перемещено.Это не происходит на iPhone с низким или высоким разрешением.

Вот мой код, небрежный, но все же очень простой.

MainMenu.m:

    CCMenuItemImage * playItem = [self makeMenuButtonWithSprite:@"Play.png" withSelector:@selector(play:)];

    CCMenuItemImage * resumeItem = [self makeMenuButtonWithSprite:@"Resume.png" withSelector:@selector(resume:)];

    CCMenuItemImage * optionsItem = [self makeMenuButtonWithSprite:@"Options.png" withSelector:@selector(options:)];

    CCMenuItemImage * helpItem = [self makeMenuButtonWithSprite:@"Help.png" withSelector:@selector(help:)];

    CCMenu *myMenu;

    // Check if there is a valid savegame by comparing versions.
    if ([[uD stringForKey:@"CFBundleVersion"] isEqualToString:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]] ) {
        myMenu = [CCMenu menuWithItems:playItem, resumeItem, optionsItem, helpItem, nil];
    } else {
        myMenu = [CCMenu menuWithItems:playItem, optionsItem, helpItem, nil];
    }

    // Arrange the menu items vertically
    [myMenu alignItemsVerticallyWithPadding:0.0f];
    myMenu.position = ccp(dB.wWidth/2,dB.wHeight/2);

    // add the menu to your scene
    [self addChild:myMenu z:100];

И CCMenuItemImageфабрика:

- (CCMenuItemImage *)makeMenuButtonWithSprite:(NSString *)spriteFileName withSelector:(SEL)selector {
    CCSprite *spriteForButton = [CCSprite spriteWithFile:spriteFileName];
    spriteForButton.anchorPoint = ccp(0.5f,0.5f);
    CCMenuItemImage * buttonImage =[CCMenuItemImage itemFromNormalImage:@"button.png"
                                                      selectedImage: @"button.png"
                                                             target:self
                                                           selector:selector];
    [buttonImage addChild:spriteForButton z:100];
    spriteForButton.position = ccp([buttonImage boundingBox].size.width/2,([buttonImage boundingBox].size.height/2)-5);
    return buttonImage;
}

Ответы [ 2 ]

3 голосов
/ 17 ноября 2010

Не думаю, что для этой проблемы существует какая-либо известная ошибка.Не уверен, как отлаживать это, не видя никакого кода, но, если это поможет, вот мой код, который успешно добавляет меню, используя cocos2d 0.99.5, на iOS 4.0, 4.1 и 4.2 (без разницы при обновлении):

-(void) initBottomMenu {
CCMenuItem *aboutButton = [self gameButtonWithName:@"about" selector:@selector(onAbout:)];
CCMenuItem *settingsButton = [self gameButtonWithName:@"settings" selector:@selector(onSettings:)];
CCMenuItem *tutButton = [self gameButtonWithName:@"tutorial" selector:@selector(onTutorial:)];

CCMenu *menu = [CCMenu menuWithItems:aboutButton, settingsButton, tutButton, nil];
menu.position = ccp(xPos, yPos);

[menu alignItemsHorizontallyWithPadding:45.0];

[self addChild:menu];
}

Метод gameButtonWithName: selector: выглядит примерно так:

-(CCMenuItem *) gameButtonWithName:(NSString *)name selector:(SEL)s {

NSString *iPadSuffix = @"IPad";

NSString *normal    = [[NSString alloc] initWithFormat:@"%@Btn%@.png", name, iPadSuffix, nil]   ;
NSString *selected  = [[NSString alloc] initWithFormat:@"%@Btn%@.png", name, iPadSuffix, nil];

CCMenuItem *retButton = [CCMenuItemImage itemFromNormalImage:normal
                                               selectedImage:selected
                                               disabledImage:selected
                                                      target:self
                                                    selector:s];

[selected release];
[normal release];

return retButton;
}

вроде неаккуратно, но он хорошо работает для добавления меню в основную сцену.

1 голос
/ 23 ноября 2010

Проблема найдена.Это было связано с моим пользовательским хаком, заставляющим iPad загружать сетчатку графики.Проблема была в моем appDelegate, где я установил contentScaleFactor, который сделал масштабирование ccDirector и несоответствие масштаба UIScreen.

Проблема сводилась к большой графике, но cocos2d думал, что координаты имеют низкое разрешение.

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