2014-12-04 2 views
1

Создание только портретной игры с использованием SpriteKit и размещение моих изображений в Images.xcassets. Это для iPhone, так что мои изображения активы настроены следующим образом:SpriteKit помогает понять масштабирование

1x, 2x, Retina 4 2x, 3x 

Например, в рамках одного изображения актива, в 2 раза, у меня есть 640x640 PNG, это соответствует отлично на iPhone 4/4s, 5/5s но на 6 (что также масштабируется @ 2x) это не так, потому что 6 имеет чуть более широкий экран @ 750px (или 375 точек). Поэтому я придумал следующую формулу, которую я могу передать в [mySprite setScale:] для каждого спрайта, который я добавляю к своей сцене.

CGFloat scale = screenPointWidth/(screenScale * 160) 

Где screenPointWidth = [[UIScreen mainScreen] bounds].size.width и screenScale = [[UIScreen mainScreen] scale]. 160 относится к базовому значению ширины пикселя 1x (или 320/2). Это возвращает масштабный мультиплеер.

С помощью этого многопользовательского режима мои 640x640 изображения масштабируются и идеально подходят на широкоэкранном экране 750.

Мои вопросы: есть ли лучший способ сделать это, или я делаю это правильно? Есть ли универсальная настройка масштабирования, которую я должен использовать вместо этого, или я должен просто масштабировать каждое положение спрайта и спрайта на основе моей формулы? Или, должен ли я не использовать Image.xcassets и вместо этого создавать индивидуальные .atlas 'для конкретных разрешений экрана? Должен ли я беспокоиться о повышении частоты дискретизации и понижающей дискретизации, или это автоматически обрабатывается самим iPhone 6/6 +?

Ref: http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

ответ

1

iPhone 6 является достаточно близко, в разрешении на iPhone 5, это означает использовать 2x изображения.

1136 х 640 - iPhone5

1334 х 750 - iphone 6

Потому что ваш фон составляет 640 пикселей в высоту, он будет иметь некоторое пространство отсутствует на верхней и нижней в портретном режиме. Вам нужно сделать фон с областями, которые вы не против отключить на небольших устройствах (iphone 4 и 5). Или вам нужно иметь черную рамку вокруг вашей игры на iphone 6. Я бы не рекомендовал масштабировать каждое изображение.

Это была распространенная проблема еще до того, как вокруг iPhone 6 был. Это изображение показывает вид, что я говорю о

http://cdn5.raywenderlich.com/wp-content/uploads/2013/09/Aspect-Ratio-Diff.jpg

Изображение Размеры

Вам нужны три размера изображения.

@ 2x = iphone4s, 5, 5s, 6 (Вы используете это для не сетчатку IPADS а)

@ 3x (1,5 * 2x) = IPhone 6 PLUS

@ 2x ~ IPad (2 * 2x) = ipad retina и retina mini

способ, которым вы хотите организовать это зависит от вас. В моей игре я разделил свои изображения на два набора атласов. один для iPad и один для Iphone.

Мой способ организации моим атласы

изображений без суффикса для не-сетчатка IPADS.

enter image description here

enter image description here

В моем коде у меня есть простая функция, чтобы решить, какие текстуры атласа я хочу, чтобы загрузить.

func getTextureAtlas(filename: String) -> SKTextureAtlas { 
    var name = filename 
    if UIDevice.currentDevice().userInterfaceIdiom != .Phone { 
     name = "\(name)-ipad" 
    } 

    return SKTextureAtlas(named: name) 
} 

пример Useage:

shipAtlas = getTextureAtlas("ship") 
+0

Reg iPhone 6 и "просто весы 2x изображения" - это на самом деле масштабировать их, или вы это означает, что 2x изображения просто вписываться в? Поскольку у меня нет 6, я использую Sim, чтобы посмотреть, как выглядят вещи, и ничто не масштабируется, хотя он действительно извлекает из моих активов 2x (естественно). –

+0

Прошу прощения, я неправильно понял ваш вопрос. Я обновил свой ответ. – hamobi

+0

Я вижу, поэтому практика заключается в том, чтобы сделать объекты изображения более крупными, чтобы они (sorta) соответствовали прямо на разных экранах? В случае @ 2x я бы сделал 1136x640 (фоновый пример), а затем загрузил его на устройствах 1024x768 и 960x640? Я думаю, что это приемлемо для изображений, которые могут не иметь большого значения, но если вам нужен точный образ, скажем, Шахматная доска, то он должен соответствовать или масштабироваться. В этом случае, если я использую шахматную доску 640x640, я могу применить свою формулу, чтобы она соответствовала спрайту, чтобы точно отображать масштабные позиции x, y. Ваш ответ добавляет ценность, но если наличие границ нежелательно, необходимо применить масштабирование, согласитесь? –

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