代码之家  ›  专栏  ›  技术社区  ›  Maciej Swic

CCMenu在iPad中不起作用

  •  0
  • Maciej Swic  · 技术社区  · 14 年前

    我正在创建一个通用应用程序,我的CCMenu在iPhone、iPhone 4和iPad上都显示得很好。不过,在iPad上触碰这些按钮时什么也做不了。

    除了修改contentScaling属性使iPad使用与iPhone 4相同的图像外,我没有特定的iPad代码。这意味着同样的图片在iPhone 4上也能用,但在iPad上却不行。

    我正在使用cocos2d 0.99.rc0和iOS 4.1sdk。我甚至不知道从哪里开始排除故障。

    我最近注意到的唯一奇怪之处是,iPad似乎只绘制了一次菜单场景,然后出于某种原因快速地重新绘制,将所有内容移动了一个像素或其他什么。我的菜单类非常简单,没有“刷新”代码或任何应该移动的东西。这在低分辨率或高分辨率的iphone上都不会发生。

    这是我的代码,草率但非常简单。

    主菜单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];
    

    以及ccMenuitemImageFactory:

    - (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 回复  |  直到 14 年前
        1
  •  3
  •   Sam Ritchie    14 年前

    我不认为这个问题存在任何已知的错误。不知道如何在没有看到任何代码的情况下调试它,但是,如果有帮助的话,我的一些代码成功地在iOS 4.0、4.1和4.2上使用cocos2d 0.99.5添加了一个菜单(升级时没有区别):

    -(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];
    }
    

    方法如下所示:

    -(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;
    }
    

    有点草率,但在我的主场景中添加菜单效果很好。

        2
  •  1
  •   Maciej Swic    14 年前

    发现问题。这与我定制的让iPad加载retina图形的方法有关。问题在于我的appDelegate设置了contentScaleFactor,这使得ccDirector比例和ui屏幕比例不匹配。

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

    推荐文章