1

每当我使用

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

Cocos2d 一直很聪明,可以在非 Retina 设备上查找“image.png”,在 Retina 设备上查找“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 - 因为我知道这是一个可能的解决方案,它看起来不像是正确的)。

谢谢!

4

2 回答 2

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 文件中所述)

于 2013-07-11T17:57:19.803 回答
1

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

搜索行

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

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

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

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

于 2013-07-12T03:09:26.880 回答