管理iphone/ipad通用应用程序中的图像

问题描述:

我只是好奇人们用什么方法动态地在他们的通用iPhone/iPad应用程序中使用更大或更小的图像。管理iphone/ipad通用应用程序中的图像

我创建了一个大的测试图像,我尝试缩小(使用cocos2d)0.46875。在iPhone 4.0模拟器中查看后,我发现结果非常糟糕......粗糙的像素边缘等等。另外,当iPhone用户不需要它们时加载巨大的图像文件是非常蹩脚的。

所以我想我可能要做的就是保存每个精灵的两个版本......大(对于iPad侧)和小(对于iPhone/iPod Touch),然后检测用户的设备并吐出适当的雪碧像这样:


NSString *deviceType = [UIDevice currentDevice].model; 
CCSprite *test; 
if([deviceType isEqualToString:@"iPad"]) { 
    test = [CCSprite spriteWithFile:@"testBigHuge.png"]; 
} else { 
    test = [CCSprite spriteWithFile:@"testRegularMcTiny.png"]; 
} 
[self addChild: test]; 

你们是怎么做到这一点的?我宁愿避免像这样的陈述散布所有的代码。我也想避免使用.xib文件,因为它是基于OpenGL的应用程序。

谢谢!

+0

噢,真棒,我才意识到你可以为您的文件命名相同的名称,并根据您将其添加到xcode项目中的资源组,它会自动决定要显示哪一个!因此,如果您将test.png放入“Resources-iPad”中,iPad将显示该图像。保存一个新的较小的.png并将其放入“资源”组中,并将显示在iPhone上。凉! – taber 2010-05-09 07:16:01

+0

实际上,现在我已经连续编译了4次或5次项目,似乎可以在Resources/test.png图片和Resources-iPad/test.png图片之间随机选择。奇怪的。如果其他人有一些建议,我很乐意听到他们,谢谢。 – taber 2010-05-09 07:19:19

我写了一个小宏帮手啄:


#define deviceFile(file, ext) \ 
    ([[UIDevice currentDevice].model rangeOfString:@"iPad"].location != NSNotFound ? \ 
    [NSString stringWithFormat:@"%@-iPad.%@", file, ext] : \ 
    [NSString stringWithFormat:@"%@.%@", file, ext]) 

用法:


// outputs either "test.png" or "test-iPad.png" depending on the user's device 
CCSprite *test = [CCSprite spriteWithFile:deviceFile(@"test", @"png")]; 
+0

我现在需要弄清楚的唯一事情是如何将坐标和其他元数据与每个图像相关联,以便我可以根据设备轻松地参考/显示它们。 – taber 2010-05-14 03:02:45

始终与任一“大”或“小”,但保持了名名的其余部分的每一个形象相同的图像。

在某个地方,您可以在启动时设置一个全局值,其值为@“Large”或@“Small”。

某处,有一个方法将采用通用名称字符串并插入全局大小说明符。

@interface CCSprite (MyProject) 
+(id) spriteWithSizedFile:(NSString *)inName; 
@end 

@implementation CCSprite(MyProject) 
+(id) spriteWithSizedFile:(NSString *)inName { 
    return [CCSprite spriteWithFile:[gSizeSpecifier stringByAppendingString:inName]]; 
} 
@end 

可能比CCSprite更好。这纯粹是一个例子。

#define M_IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
and make a function like this 

    +(id)BooL 
{ 
    if(M_IS_IPAD) 
    { 
     return true; 
    } 
    else 
    { 
    return false; 
    } 

}

使用这种随时随地:) 并更改为iPad或iPod因此该图片....

问候:肖凯特