CCMenu无法在iPad上运行

时间:2010-11-16 08:35:45

标签: iphone ipad ios4 cocos2d-iphone

我正在创建一个通用应用程序,我的CCMenu在iPhone,iPhone 4和iPad上都显得很好。但是,当触摸iPad时按钮不起作用。

除了修改contentScaling属性之外,我没有特定的iPad代码,因此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 个答案:

答案 0 :(得分:3)

我认为此问题不存在任何已知错误。不知道怎么调试这个没有看到任何代码,但是,如果它有帮助,这里有一些我的代码使用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 :(得分:1)

发现问题。这与我的自定义黑客有关,使iPad加载视网膜图形。问题出在我的appDelegate中,我设置了contentScaleFactor,这使得ccDirector规模和UIScreen规模不匹配。

问题归结为图形很大但cocos2d认为坐标是低分辨率。