Iphone CCMenu在iPad中不起作用

Iphone CCMenu在iPad中不起作用,iphone,ipad,ios4,cocos2d-iphone,Iphone,Ipad,Ios4,Cocos2d Iphone,我正在创建一个通用应用程序,我的CCMenu在iPhone、iphone4和iPad上都显示得很好。然而,当在iPad上触摸按钮时,它们什么都不起作用 除了修改contentScaling属性,使iPad使用与iPhone4相同的图像之外,我没有任何特定的iPad代码。这意味着相同的图像可以在iPhone4上使用,但不能在iPad上使用 我正在使用cocos2d0.99.rc0和ios4.1sdk。我甚至不知道从哪里开始解决这个问题 我最近注意到的唯一奇怪之处是,iPad似乎只绘制了一次菜单场景

我正在创建一个通用应用程序,我的CCMenu在iPhone、iphone4和iPad上都显示得很好。然而,当在iPad上触摸按钮时,它们什么都不起作用

除了修改contentScaling属性,使iPad使用与iPhone4相同的图像之外,我没有任何特定的iPad代码。这意味着相同的图像可以在iPhone4上使用,但不能在iPad上使用

我正在使用cocos2d0.99.rc0和ios4.1sdk。我甚至不知道从哪里开始解决这个问题

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

这是我的代码,虽然很草率,但非常简单

main menu.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;
}

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

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

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

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

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

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

发现问题。这与我定制iPad加载视网膜图形有关。问题出在我的appDelegate中,我在其中设置了contentScaleFactor,这使得ccDirector比例和UIScreen比例不匹配


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

发现了问题。这与我定制iPad加载视网膜图形有关。问题出在我的appDelegate中,我在其中设置了contentScaleFactor,这使得ccDirector比例和UIScreen比例不匹配


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

谢谢分享。我现在已经在原始帖子中添加了我自己的代码-看起来和你的代码几乎一样,但它不起作用。顺便说一句,你不能用[NSString stringWithFormat:“%@Btn%@.png”,name,iPadSuffix,nil]创建你的字符串吗;然后跳过整个发布过程?我认为所有使用便利方法(即不是[[obj alloc]init])创建的对象都是自动删除的,不是吗?是的,这是肯定的,但最好的做法是以这种方式处理尽可能多的alloc和发布。不知道iPhone什么时候会决定破解并释放用便利方法创建的对象——这样我就知道什么时候会发生。一旦iPhone得到适当的垃圾收集,这一切都不会成为问题!当你取消z呼叫时会发生什么?此外,如果您还没有这样做,请尝试将NSLog(“按钮按下”);用这些按钮在选择器内呼叫,看看你是否至少收到了触摸。图像是相同的,因此您当然无法直观地分辨。好的,我从菜单和工厂中删除了所有z调用,并添加了一个NSLog(@“play:”);剧中的台词:方法。结果表明,该方法从未被调用,例如菜单缺少触摸或其他内容。谢谢分享。我现在已经在原始帖子中添加了我自己的代码-看起来和你的代码几乎一样,但它不起作用。顺便说一句,你不能用[NSString stringWithFormat:“%@Btn%@.png”,name,iPadSuffix,nil]创建你的字符串吗;然后跳过整个发布过程?我认为所有使用便利方法(即不是[[obj alloc]init])创建的对象都是自动删除的,不是吗?是的,这是肯定的,但最好的做法是以这种方式处理尽可能多的alloc和发布。不知道iPhone什么时候会决定破解并释放用便利方法创建的对象——这样我就知道什么时候会发生。一旦iPhone得到适当的垃圾收集,这一切都不会成为问题!当你取消z呼叫时会发生什么?此外,如果您还没有这样做,请尝试将NSLog(“按钮按下”);用这些按钮在选择器内呼叫,看看你是否至少收到了触摸。图像是相同的,因此您当然无法直观地分辨。好的,我从菜单和工厂中删除了所有z调用,并添加了一个NSLog(@“play:”);剧中的台词:方法。结果表明,该方法从未被调用,例如菜单缺少触摸或其他内容。您是否使高分辨率图像正常工作?如果是-请张贴答案如何做你使高分辨率图像工作吗?如果是-请张贴答案如何做