我正在创建一个通用应用程序,我的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;
}
答案 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认为坐标是低分辨率。