Cocos2d не определяет автоматически изображения спрайтов сетчатки @2x

Всякий раз, когда я использую

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

Cocos2d всегда был достаточно умен, чтобы искать «image.png» на устройствах без сетчатки и «[email protected]» для устройств с сетчаткой.

Но всякий раз, когда я пытаюсь динамически построить строку имени файла спрайта, т.е.

    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", т.е. "[email protected]", никогда не подхватываются, и если "greenSquare.png " не существует (в то время я тестировал только дисплеи Retina), все приложение вылетает.

Любая идея, почему это происходит и что я могу сделать, чтобы решить эту проблему?

(В идеале без необходимости вручную проверять состояние сетчатки устройства, а затем вручную добавлять @2x - поскольку я знаю, что это возможное решение, оно просто не похоже на правильное).

Спасибо!


person Salman    schedule 11.07.2013    source источник


Ответы (2)


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)

person Kreiri    schedule 11.07.2013
comment
Это сработало отлично! Интересно, почему оригинальный тестовый код, т. е. sprite = [CCSprite spriteWithFile:@image.png]; автоматически обнаружены как image.png, так и [email protected] - person Salman; 12.07.2013

стандартный 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"

person busta117    schedule 12.07.2013