2013-11-17 3 views
5

Я только что начал использовать Sprite Kit и столкнулся с проблемой загрузки текстурированных спрайтов.Размеры или разрешение текстуры Sprite Kit

Я создал новый проект с шаблоном Sprite Kit в Xcode и хотел добавить простой спрайт с файлом изображения в качестве текстуры. Вот код, который я использовал в методе инициализации сцены:

SKSpriteNode *myNode = [SKSpriteNode spriteNodeWithImageNamed:@"my_image_file"]; 
myNode.position = CGPointMake(100, 100); 
[self addChild:myNode]; 

Я не добавить расширение имени изображения, так что мой файл называется «my_image_file.png», но я опустил .png на конец. Я также переместил создание сцены в метод viewWillLayoutSubviews, как это предлагается в ряде руководств.

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

Я переименовал свой файл «[email protected]», и все это работало нормально, спрайт появился, так как я ожидаю, что он будет выглядеть на экране сетчатки. Поскольку у меня есть довольно много файлов изображений, я предпочитаю не переименовывать их все, и все это отлично работает в приложении Apple Adventure без постфикса @ 2x.

Он также отлично работает, если я явно определить размер текстуры, используя этот метод на SKSpriteNode:

+ (instancetype)spriteNodeWithTexture:(SKTexture *)texture size:(CGSize)size 

Я очистил проект и удалил приложение из имитатора между каждым запуском, поэтому я предполагаю, что это не проблема с застрявшими или отсутствующими файлами изображений.

Я также попытался найти в Интернете, чтобы посмотреть, как работают соглашения об именах файлов текстур спрайтов, но я не смог найти документацию по этой проблеме.

Может кто-нибудь, пожалуйста, кратко объясните, как это работает, или, по крайней мере, покажите мне решение, которое не предполагает переименование всех моих файлов изображений или определение размера явно для всех моих спрайтов?

Спасибо, UTR

ответ

1

Если вы используете каталог активов, вам не нужно переименовать все файлы. Просто нажмите на Images.xcassets, если вы создали проект, используя шаблон Xcode SpriteKit. Затем перетащите изображения в соответствующие места. Вы также можете создать Каталог активов вручную, выполнив новый файл -> Ресурсы -> Каталог активов.

+0

Спасибо, он отлично работает! Я все еще не понимаю, как работает приложение Apple Adventure. Он использует только каталоги активов для значков приложений и изображений запуска. – utrutr

+0

Использует текстурные атласы для карты и персонажей. – quaertym

+0

Я использую также атлас текстуры, но это не помогает. Есть ли опция на атласе текстуры, которая позволяет Xcode знать, будут ли изображения внутри использоваться в качестве текстур разрешения сетчатки? – utrutr

0

Я сам искал ответ, и это выглядит как конкретно приключенческая игра, например ручки сетчатки размеров, как это:

// On iPhone/iPod touch we want to see a similar amount of the scene as on iPad. 
// So, we set the size of the scene to be double the size of the view, which is 
// the whole screen, 3.5- or 4- inch. This effectively scales the scene to 50%. 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
    viewSize.height *= 2; 
    viewSize.width *= 2; 
} 

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

+0

Поскольку существуют 3x устройства, используйте '[UIScreen mainScreen] .scale' как множитель. – DDPWNAGE