2013-11-08 7 views
2

ОК, это заставило меня кричать о стены ... так что несите со мной, пожалуйста.Sprite Kit Текстуры, действующие смешно

Я начал кодировать простую игру, используя шаблон SpriteKit в Xcode.

Я добавил два PNG в папку с именем Stage01.atlas и перетащил ее в проект. Невозможно вспомнить, какой вариант я выбрал, потому что он отображается как синий значок папки в навигаторе проекта (возможно, потому, что он имеет расширение?).

Далее я инстанцирован несколько спрайтов с помощью

[[SKSpriteNode alloc] initWithImageNamed:@"[email protected]_Or_Extension"]; 

Во-первых, это не сработало, потому что я забыл включить текстуры атласы в настройках сборки. Затем он работал как шарм, но ...

Затем я добавил третий атлас для отображения нового вида спрайта.

Новый спрайт нигде не видно.

Я пробую чистую установку: удалите приложение с устройства, очистите, постройте.

Теперь все спрайты отображаются как белый квадрат с ошеломляющей границей и большой, красный «Х» внутри. Я также получаю сообщение консоли вдоль линий:

SKTexture: Error loading image resource: "[email protected]_Or_Extension" 

Я попытался удалить папку .atlas и повторно добавить его, и как «Создание групп для любых добавленных папок» и «Создание ссылки папки для любого добавленные папки " (это может привести к тому, что ресурс будет помещен в подпапку вместо корня пакета, поэтому это обычно имеет значение для UIImage и т. д.), безрезультатно.

Я заменил код спрайт создания с этим:

SKTexture* texture = [SKTexture textureWithImageNamed:name]; 
SKSpriteNode* body = [[SKSpriteNode alloc] initWithTexture:texture]; 

... и поставил точку останова, чтобы увидеть, если текстура nil. Это не.

Итак, что дает?

Сторона примечания: текстура «космического корабля» в комплекте с шаблоном делает штраф.

Сторона примечания 2: Кто-то создает тег «spritekit» (SO не позволяет мне использовать его, потому что он уже существует », но это не похоже на предложение).

+0

Вы добавили третье изображение в атлас в XCODE или в поисках? – AndyOS

+0

Это имеет значение? Если я добавлю «ссылку на папку», добавление файла в finder также автоматически появится в Xcode. Теперь я пытаюсь с чистой/чистой папкой сборки, удалять приложение и т. Д. В нескольких устройствах и симуляторах, а результаты являются пятнистыми ... –

+1

Это просто догадка, думаю, что я столкнулся с проблемами до того, как я вносил изменения в xcode, нужно снова проверить, чтобы быть уверенным – AndyOS

ответ

7

Для использования текстурного атласа текстур сначала необходимо загрузить текстуры атлас:

SKTextureAtlas* atlas = [SKTextureAtlas atlasNamed:@"Stage01"]; 

Затем вы можете создать спрайты из ее текстур:

SKTexture* texture = [atlas textureNamed:@"My_Image_..."]; 
SKSpriteNode* body = [SKSpriteNode spriteNodeWithTexture:texture]; 

Тот факт, что первоначально это работало, возможно, потому что изображения были добавлены без генерируемого .atlas, и даже если вы впоследствии удалите изображения из проекта, они останутся в развернутом пакете приложений, потому что Xcode не удаляет ресурсы из набора приложений.Поэтому Sprite Kit первоначально использовал изображения, отличные от атласа, и не мог их найти, и он не будет автоматически искать их в атласе текстуры и не будет автоматически загружать атлас.

+0

Спасибо, это сделал трюк! –

+0

Я столкнулся с этой проблемой. Оказывается, атлас сохраняет исходное имя, даже если оно переименовано в файловую систему или в xamarin. Я вернулся в Photoshop и воссоздал файл с правильным именем, и все в порядке. Чтобы проверить это, я просмотрел массив TextureNames во время выполнения. –

+0

Я был в порядке в течение нескольких недель, и я столкнулся с той же проблемой, добавил новый png и получил размеры, но не правильный образ. Это похоже на то, что он печенье изменил размеры на существующие изображения. Однако, когда я следил за твоими шагами, все ад провалился, и ни одно из моих изображений не работает, кроме самых больших. Я пробовал очистить, удалить производные данные и все такое. На некоторых изображениях загружается «старый способ», я преобразовал каждый вызов SKSpriteNode в указанный выше метод и даже возврат к предыдущему исходному элементу управления не восстанавливается. Следующий шаг - удалите текстурный атлас и надейтесь! – GilesDMiddleton

Смежные вопросы