2010-05-09 6 views
2

Je suis simplement curieux de savoir quelles méthodes les gens utilisent pour utiliser dynamiquement des images plus grandes ou plus petites dans leurs applications universelles iPhone/iPad.gérer des images dans une application universelle iphone/ipad

J'ai créé une grande image de test et j'ai essayé de réduire (en utilisant cocos2d) de 0,46875. Après avoir vu cela dans le simulateur de l'iPhone 4.0, j'ai trouvé que les résultats étaient assez merdiques ... bords rugueux des pixels, etc. De plus, charger d'énormes fichiers image pour les utilisateurs d'iPhone quand ils n'en ont pas besoin est plutôt boiteux.

Donc je vais probablement devoir enregistrer deux versions de chaque sprite ... large (pour le côté iPad) et petite (pour iPhone/iPod Touch) puis détecter l'appareil de l'utilisateur et cracher le bon sprite comme ça:


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]; 

Comment faites-vous les gars? Je préfère éviter d'asperger tout mon code avec des instructions comme celle-ci. Je souhaite également éviter d'utiliser des fichiers .xib car il s'agit d'une application basée sur OpenGL.

Merci!

+0

Oh, génial, je viens de réaliser que vous peut nommer vos fichiers sous le même nom et, selon le groupe de ressources auquel vous les ajoutez dans votre projet xcode, il décidera automatiquement lequel afficher! Donc, si vous mettez test.png dans "Ressources-iPad" l'iPad affichera cette image. Enregistrez un nouveau .png plus petit et lancez-le dans le groupe "Ressources" et cela sera affiché sur l'iPhone. Cool! – taber

+0

En fait, maintenant que j'ai compilé le projet 4 ou 5 fois de suite, il semble choisir aléatoirement entre l'image Resources/test.png et l'image Resources-iPad/test.png. Bizarre. Si quelqu'un d'autre a des suggestions, j'aimerais les entendre, merci. – taber

Répondre

4

j'ai écrit un peu thingy aide macro:


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

Utilisation:


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

la seule chose que je dois comprendre maintenant est comment associer les coordonnées et d'autres métadonnées avec chaque image afin que je puisse facilement les référencer/les afficher correctement en fonction de l'appareil. – taber

0

nommer Constamment chaque image soit "Large" ou "Small" mais garder le reste des noms du même chose pour des images équivalentes.

Quelque part, avez un global avec la valeur @ "Large" ou @ "Small" que vous définissez au lancement.

Quelque part, avez une méthode qui prendra une chaîne de nom générique et insérera le spécificateur de taille globale.

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

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

Il y a probablement un meilleur endroit que CCSprite. Ceci est purement un exemple.

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; 
    } 

}

utiliser ce partout :) et changer les images pour iPad ou iPod en conséquence à cette ....

Cordialement: Shauket

Questions connexes