Как сделать SKScene фиксированной шириной?

108
12

Я делаю игру на основе spriteKit и задаюсь вопросом, могу ли я сделать фиксированную ширину SKScene (чтобы упростить компоновку спрайтов), и пусть она изменяет размер до фактической ширины экрана, сохраняя соотношение сторон. Возможно ли достичь этой цели и рекомендуется ли (спрайты не будут отображаться явно из-за изменения размера)?

спросил(а) 2021-01-25T08:54:41+03:00 4 месяца, 2 недели назад
1
Решение
89

Предоставление сцены фиксированного размера - это то, что мы хотим делать в играх SpriteKit. SpriteKit будет масштабировать игру для каждого устройства, используя настройки scaleMode (по умолчанию -.aspectFill). Не очень хорошая идея сделать сцену размером устройства или использовать .resizeFill для режима масштабирования, так как это приведет к огромным несоответствиям на разных устройствах. Я был там раньше с 1 игрой, и это был абсолютный кошмар.


Итак, у нас в основном есть 2 способа сделать это правильно


1) Задайте размер сцены для iPad (например, 1024x768-landscape, 768x1024 - портрет. Это была настройка по умолчанию в Xcode 7.


Вы, как обычно, просто показываете дополнительный фон в верхней/нижней (альбомной ориентации) или влево/вправо (портрет) на iPads.


Примеры игр, которые показывают больше на iPads:


Altos Adventure, Leos Fortune, Limbo, Line Zen, Modern Combat 5.


2) Apple изменила размер сцены по умолчанию в xCode 8 на iPhone 6/7 (750 * 1334-Portait, 1337 * 750-Landscape). Этот параметр обрезает вашу игру на iPad.


Примеры игр, которые меньше показывают на iPad:

Город Лумино, атака единорога робота


Выбор между этими двумя вариантами зависит от вас и зависит от того, какую игру вы делаете. Обычно я предпочитаю использовать вариант 1 и показывать больше фона на iPads.


Независимо от режима масштаба шкалы, обычно лучше всего оставить значение по умолчанию .aspectFill. Таким образом, у вас будет постоянный опыт на всех устройствах.


Я бы не стал делать какие-то случайные хаки, где вы вручную меняете сцену или node размеры/шкалы на разностных устройствах, вы должны позволить xCode/SpriteKit сделать это за вас.


В коде вы должны инициализировать SKScene с указанным вами предпочтительным размером


let gameScene = GameScene(size: CGSize(width: 1024, height: 768))

Если вы используете редактор визуальной сцены, вы устанавливаете размер сцены непосредственно на панели инспектора справа.


Надеюсь, что это поможет

ответил(а) 2021-01-25T08:54:41+03:00 4 месяца, 2 недели назад
44

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

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

ответил(а) 2021-01-25T08:54:41+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема