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

时间:2010-05-09 07:08:48

标签: iphone cocos2d-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];

你们这是怎么做到的?我宁愿避免使用if这样的语句来填充我的所有代码。我还想避免使用.xib文件,因为它是一个基于OpenGL的应用程序。

谢谢!

3 个答案:

答案 0 :(得分:4)

我写了一个小宏帮手:


#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")];

答案 1 :(得分:0)

使用“大”或“小”一致地命名每个图像,但保持其他名称对于等效图像相同。

在某个地方,拥有一个全局值,您可以在启动时设置值“大”或“小”。

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

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

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

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

答案 2 :(得分:0)

#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的图像....

问候:shauket