cocos2d CCMenu在视网膜设备上填充奇怪

时间:2012-06-10 15:01:02

标签: iphone ios xcode cocos2d-iphone retina-display

情况: 我正在使用[(CCMenu *)myMenu alignItemsVerticallyWithPadding:4.0f]垂直布局几个按钮(CCMenuItemSprite)。在非视网膜设备上,填充按预期显示,但在模拟器上处于视网膜模式时,填充似乎加倍。关于为什么的任何想法?

代码:

CCMenuItemSprite *itemPlay = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"play.png"] selectedSprite:nil target:self selector:@selector(goPlay:)];

CCMenuItemSprite *itemHowto = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"howto.png"] selectedSprite:nil target:self selector:@selector(goHowto:)];

CCMenuItemSprite *itemSettings = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"settings.png"] selectedSprite:nil target:self selector:@selector(goSettings:)];

CCMenuItemSprite *itemHelp = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"help.png"] selectedSprite:nil target:self selector:@selector(goHelp:)];

CCMenu *myMenu = [CCMenu menuWithItems:itemPlay,itemHowto,itemSettings,itemHelp, nil];
myMenu.position = ccp(160.0f,216.0f);
[myMenu alignItemsVerticallyWithPadding:4.0f];
[self addChild: myMenu z:10];

更新 我讨厌做这样的事情,但如果不存在更好的解决方案,我会这样做:

float padding = 4.0f;
// flag stored in app delegate to know whether we are retina
if([[AppDelegate sharedAppDelegate] isRetina])padding = (2.0f);
CCMenu *myMenu = [CCMenu menuWithItems:itemPlay,itemHowto,itemSettings,itemHelp, nil];
myMenu.position = ccp(160.0f,216.0f);
[myMenu alignItemsVerticallyWithPadding:padding];
[self addChild: myMenu z:10];

3 个答案:

答案 0 :(得分:1)

<强>解决:
填充问题是由TexturePacker中的设置创建的。我有内在填充&#39;设置为4px的值。删除设置修复了问题。见下面的截图:

enter image description here

答案 1 :(得分:0)

我对cocos2d没有多少经验,但你可以试试这个:

[myMenu alignItemsVerticallyWithPadding:(4.0f/[[UIScreen mainScreen] scale])];

答案 2 :(得分:0)

你有视网膜资产吗? cocos2d不会自动扩展你的资产,所以你的CCSprite是一半大小,因此填充似乎加倍。