Mac SpriteKit — невозможно создать атлас текстур во время компиляции

Я некоторое время использую SpriteKit в iOS; сейчас я разрабатываю приложение для Mac.

Я настроил атлас текстур, как обычно:

  1. Включите создание атласа текстур для как проекта, так и цели (я начал с шаблона «Приложение на основе документов», а не «Игра SpriteKit». У него другие настройки сборки).
  2. Перетащите все отдельные файлы изображений текстуры в папку,
  3. Переименуйте папку в "Something.atlas",
  4. Добавьте папку в проект,
  5. Во время выполнения создайте атлас по имени (например, [SKTextureAtlas atlasNamed:@"Something"];).
  6. Получите отдельные «текстуры» по имени (например, [_atlas textureNamed:@"MyTexture"];) и создайте с ними SKSpriteNode экземпляра.

Я предварительно загружаю атлас асинхронно, но обработчик завершения никогда не вызывается (см. комментарии):

_atlas = [SKTextureAtlas atlasNamed:@"Something"];

        if (!_atlas) {
            NSLog(@"Error: Failed to create atlas!");
            // This line doesn't execute, so atlas is not nil.
        }

        [_atlas preloadWithCompletionHandler:^(void){
            // This block doesn't get executed either, 
            // so atlas loading somehow fails...

            NSLog(@"Atlas Loaded!");

            [self createSprites];
        }];

Когда я проверяю содержимое пакета продукта сборки (например, MyApp.app), в подкаталоге ресурсов я вижу папку atlas ("Something.atlasc"), но он содержит только файл .plist без записей, а ресурсов изображений нигде нет... Так что же дает?


person Nicolas Miari    schedule 30.05.2014    source источник
comment
Не по теме, но... возможно self внутри блока - не лучшая идея?   -  person Nicolas Miari    schedule 30.05.2014
comment
является ли .atlas ссылкой на папку? В xcode папка должна иметь синий значок, а не желтый значок, и она должна находиться в группе (папка с желтым значком) или в корне проекта.   -  person LearnCocos2D    schedule 30.05.2014
comment
Да это так. После небольшого тестирования выяснилось, что проблема связана с рабочей областью (да, вы не ослышались). Одни и те же проекты, созданные из другого рабочего пространства, работают нормально. ЛЮБОЙ проект, открытый или созданный в этом рабочем пространстве, экспортирует сломанный атлас...   -  person Nicolas Miari    schedule 30.05.2014
comment
Я отправил отчет об ошибке в Apple (17076217) с файлом рабочей области и несколькими проектами (включая атлас) в качестве вложения.   -  person Nicolas Miari    schedule 30.05.2014
comment
На самом деле, похоже, нет способа импортировать папку .atlas в виде желтого значка в Xcode: независимо от того, какой переключатель вы выбрали, он всегда экспортируется в виде синего значка (ссылка на папку), а целевое членство применяется только к папке как в целом (не отдельные файлы).   -  person Nicolas Miari    schedule 30.05.2014


Ответы (1)


На самом деле, это было не рабочее пространство. То же самое рабочее пространство/проект при копировании на рабочий стол строится нормально.

Причина, по-видимому, в том, что один из промежуточных каталогов в пути к папке проекта имел имя, состоящее из японских символов. Я тестировал следующим образом:

  1. Измените имя папки на английское -> чистая папка сборки -> сборка -> ОК
  2. Измените имя папки обратно на японское -> чистая папка сборки -> сборка -> Атлас сломан
  3. Измените имя папки на английское -> очистить папку сборки -> построить -> ОК

...(вы видите шаблон)...

Интересно, почему и как это влияет только на экспорт текстурных атласов и больше ни на что.

Надеюсь, этот опыт поможет кому-то еще в будущем...

Я также обновлю отчет об ошибке в Apple.

ОБНОВЛЕНИЕ. Согласно Apple, проблема была решена в iOS 8 beta 2 (сборка 12A4297e). У меня не было возможности проверить (проект, над которым я работал, был прототипом, который не взлетел, и я остановился на решении со сменой имени). В любом случае iOS 8 теперь финальная.

person Nicolas Miari    schedule 30.05.2014