Как изменить размер спрайтов в игре с универсальным набором спрайтов

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

С файлами spritekit и scene.sks у меня нет возможности автоматически изменять размеры спрайтов, как раньше. В Интернете не так много контента об универсальных приложениях, поэтому я изо всех сил пытаюсь найти решение.

Мой вопрос: как мне определить размер объектов и убедиться, что мои сцены выглядят одинаково на разных устройствах?

Если у вас есть хороший пример, который мог бы объяснить это, это было бы очень полезно. Благодарю вас!


person Discoveringmypath    schedule 22.03.2017    source источник
comment
Как правило, вы предоставляете активы 1x, 2x и 3x. Вы должны сосредоточиться на конкретной проблеме, например. Я использую это изображение, и сцена имеет этот режим масштабирования, и на этих устройствах она выглядит по-другому... В противном случае вы можете найти учебник Рэя Вендерлиха под названием «Создание универсального приложения». Но даже этот учебник не является решением во всех случаях, и это действительно зависит от игры.   -  person Whirlwind    schedule 22.03.2017
comment
Спасибо за чаевые. Я видел этот урок, но пропустил его, потому что он был опубликован в 2013 году. Может быть, есть еще что-то хорошее, что я могу извлечь из него.   -  person Discoveringmypath    schedule 22.03.2017


Ответы (1)


Что мы обычно делаем в SpriteKt, так это даем SKScene фиксированный размер и позволяем SpriteKit делать масштабирование для вас на разных устройствах.

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

1) Установите размер сцены на iPad (например, 1024 x 768 – горизонтальная, 768 x 1024 – портретная). Это было значением по умолчанию в Xcode 7.

Обычно вы просто имеете / показываете дополнительный фон сверху / снизу (пейзаж) или слева / справа (портрет) на iPad, который обрезается на iPhone.

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

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

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

Примеры игр, которые меньше отображаются на iPad:

Люмино Сити, атака роботов-единорогов

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

Независимо от размера сцены режим масштабирования обычно лучше оставить по умолчанию .aspectFill.

Вы должны использовать универсальный слот активов и / или изображения для конкретных устройств. Таким образом, у вас будет одинаковый опыт на всех устройствах.

Spritekit масштабирует полную игру на iPad

Как сделать так, чтобы SKScene имела фиксированную ширину?

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

person crashoverride777    schedule 22.03.2017
comment
Поскольку iPad Pro имеет больший размер экрана, должен ли я установить размер сцены: 1024 x 1366 или 1366 x 1024? В противном случае сцена масштабировалась бы на этом устройстве, верно? - person Discoveringmypath; 22.03.2017
comment
Я поставил 1024*768 (пейзаж) или 768*1024 (портрет). Но вы также можете установить разрешение iPad pro, если хотите. SpriteKit будет использовать режим масштабирования (.aspectFill) для соответствия каждому устройству. Пока вы добавляете все правильные изображения (1x, 2x, 3x), все будет в порядке. - person crashoverride777; 22.03.2017
comment
Лучший способ — создать новый шаблон игры и поиграть с размером сцены и изображениями. - person crashoverride777; 22.03.2017
comment
Хорошо, так что масштабирование не будет проблемой, когда дело доходит до размещения. - person Discoveringmypath; 22.03.2017
comment
Нет, он будет идеально смотреться на всех iPhone. Он также будет идеально смотреться на iPad, за исключением того, что iPad имеет другое соотношение сторон. Вот почему в зависимости от того, выберете ли вы вариант 1 или 2, на iPad будет либо отображаться больше, либо немного обрезаться. Вам просто нужно помнить об этом, когда вы разрабатываете свою игру. Почему бы не создать пример шаблона игры. Используйте вариант 1 и добавьте полноэкранное изображение, которое идеально подходит для сцены iPad. Затем запустите на iPhone и посмотрите, сколько кадра будет обрезано. Затем попробуйте вариант 2 и добавьте фоновое изображение, которое идеально подходит для всего экрана iPhone. Затем запустите на iPad и посмотрите, что обрезается. - person crashoverride777; 22.03.2017
comment
Таким образом, вы поймете, какой вариант лучше всего подходит для вашей игры, а что обрезается. - person crashoverride777; 22.03.2017
comment
Мне интересно, если я понимаю это неправильно, мне любопытно соотношение сторон 1024 * 768, это 3: 4, соотношение сторон ipad. Не будет ли .aspectfill на устройстве iphone с соотношением сторон 9:16 немного обрезать верх и низ? Был бы .aspectfit лучше, тогда бы он не обрезал ни одной сцены, у меня просто было бы лишнее пространство по бокам. Или я могу установить соотношение сторон 9:16 и иметь дополнительное пространство сверху и снизу для iPad? - person Discoveringmypath; 22.03.2017
comment
Я должен буду протестировать позже. но да, я планирую это сделать. Я ценю помощь до сих пор. У меня есть еще один быстрый вопрос. Масштабирование также масштабирует фактические текстуры или изображения, которые я использую? например, ipad — это устройство 2x, а iphone 7 — устройство 2x, но iphone намного меньше. Я хочу быть уверен, что он сам уменьшит изображение - person Discoveringmypath; 22.03.2017
comment
Я всегда использую .aspectFill. Да, вы правы, если вы используете вариант 1, он немного обрежет верх и низ на iPhone (альбомная ориентация). Я предпочитаю говорить, что на iPad будет отображаться больше, но идея та же. Та область, которая обрезается на iPhone, — это то, что вы видите только на iPad, обычно это небо и земля. Если вы используете вариант 2, он будет обрезан на iPad. - person crashoverride777; 22.03.2017
comment
Обычно вам просто нужны 3 изображения из универсального каталога активов (1x, 2x, 3x) для приложения iPhone/iPad. SpriteKit сделает все остальное за вас. - person crashoverride777; 22.03.2017
comment
Как я уже сказал, лучше всего протестировать оба варианта в новом шаблоне с полноэкранным фоновым изображением, которое точно соответствует размеру сцены. - person crashoverride777; 22.03.2017
comment
Спасибо за советы, сегодня проверю позже. Вы определенно ответили на мой вопрос, и теперь я определенно лучше понимаю. Отмечено как правильное. - person Discoveringmypath; 22.03.2017
comment
Да, тестирование всегда лучший вариант для лучшего понимания. Вы хотите убедиться, что ваша структура верна, прежде чем вы зайдете слишком далеко в разработку. Сделайте этот базовый шаблон игры с обоими вариантами. Создайте 1 персонажа с 3 изображениями в универсальном каталоге ресурсов (например, 100 x 100, 200 x 200, 300 x 300). Затем создайте 1 полноэкранное фоновое изображение с четкой текстурой, одно для разрешения iPad (вариант 1) и 1 для разрешения iPhone (вариант 2). Затем протестируйте оба варианта в симуляторе на каждом устройстве, используя правильное фоновое изображение. - person crashoverride777; 22.03.2017
comment
Независимо от варианта, он всегда будет выглядеть одинаково на каждой модели iPhone или iPad, так что вам не о чем беспокоиться. Вам просто нужно учитывать разницу между iPhone и iPad. Спасибо за отметку. Удачного кодирования. - person crashoverride777; 22.03.2017
comment
Не за что. Удачного кодирования - person crashoverride777; 22.03.2017
comment
@crashoverride777 Когда я устанавливаю для сцены разрешение 1337*750, на iPhone все прекрасно вписывается, но на iPad все увеличивается, а узлы не отображаются на экране. Как расположить узлы так, чтобы они поместились на экране iPad? - person Brejuro; 24.06.2017
comment
Используя этот параметр, вы будете обрезать на iPad. Вы должны будете принять это во внимание при разработке своей игры. - person crashoverride777; 24.06.2017