2010-05-09 47 views
2

我只是好奇人們用什麼方法動態地在他們的通用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

回答

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

我現在需要弄清楚的唯一事情是如何將座標和其他元數據與每個圖像相關聯,以便我可以根據設備輕鬆地參考/顯示它們。 – taber 2010-05-14 03:02:45

0

始終與任一「大」或「小」,但保持了名名的其餘部分的每一個形象相同的圖像。

在某個地方,您可以在啓動時設置一個全局值,其值爲@「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更好。這純粹是一個例子。

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因此該圖片....

問候:肖凱特