Cocos2d不能自动检测@ 2x视网膜精灵图像

时间:2013-07-11 17:42:49

标签: image cocos2d-iphone sprite retina

每当我使用

sprite = [CCSprite spriteWithFile:@"image.png"];

Cocos2d一直非常聪明,可以在非视网膜设备上寻找“image.png”,在视网膜设备上寻找“image@2x.png”。

但每当我尝试动态构建精灵文件名字符串,即

    int random = arc4random() % 2;

    switch (random) {
        case 0:
            color = @"blue";
            break;
        case 1:
            color = @"green";
            break;
        default:
            break;
    }

    filename = [[NSString alloc] initWithString:color];
    filename = [filename stringByAppendingString:@"Square.png"];

    // Sprite should now be either "greenSquare.png" or "blueSquare.png"
    sprite = [CCSprite spriteWithFile:filename];

突然间,我的@ 2x文件被完全忽略了 - 而cocos2d只查找===“greenSquare.png”的文件,即“greenSquare@2x.png”从未被拾取,如果“ greenSquare.png“不存在(我当时只测试了视网膜显示)整个应用程序崩溃。

知道为什么会这样,我能做些什么来解决这个问题?

(理想情况下,无需手动检查设备视网膜状态,然后手动添加@ 2x - 因为我知道这是一个可能的解决方案,它似乎不是正确的解决方案。)

谢谢!

2 个答案:

答案 0 :(得分:6)

cocos2d不使用@ 2x命名方案。相反,它使用后缀-hd用于iphone视网膜图像,-ipad用于ipad图像,-ipadhd用于ipad视网膜图像。

示例:“Square.png”和“Square-hd.png”

您还可以启用后备后缀。启用后,它将尝试按以下顺序搜索以下后缀,直到找到一个:

  • 在iPad HD上:iPad HD,iPad,iPhone HD,资源无分辨率
  • 在iPad上:iPad,iPhone HD,没有分辨率的资源
  • 在iPhone HD上:iPhone HD,没有分辨率的资源
  • 在Mac HD上:Mac HD,Mac,没有分辨率的资源
  • 在Mac上:Mac,没有解决方案的资源

(如CCFileUtils.h文件中所述)

答案 1 :(得分:1)

视网膜图像的标准cocos2D是sufix -hd如果您的图像名为“greenSquare.png”,cocos2D的视网膜需要命名为“greenSquare-hd.png”,但您可以更改此标准并告诉cocos2D使用sufix @ 2x,你可以修改AppDelegate.m

搜索行

CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils];
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];

并将sufix @“ - hd”更改为@“@ 2x”,因此您的代码可能如下所示:

[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"@2x"];

最佳做法是更改所有图片的名称,将“@ 2x”替换为“-hd”