我很好奇人们使用什么方法在他们的通用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的应用程序。
谢谢!
答案 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