Универсальные 2D игровые активы и абсолютное позиционирование узлов

У меня есть вопрос относительноуниверсальные игровые активы а такжеабсолютное позиционирование изSKNodes вSprite Kit (iOS 8+).

Я постараюсь представить мою проблему в следующем примере::

Представь себе2D сверху вниз игра сSKSpriteNode который представляет дом. В доме есть несколько детейSKSpriteNodes, которые представляют стулья, стол, диван и т. д.

У меня есть 3 варианта домашнего актива:

1x - 200 x 200px (Без сетчатки iPad),2x - 400 x 400px (Retina айфоны и айпады),3x - 600 x 600px (iPhone 6 Plus).

Важный: Дочерние узлы (стулья, стол и т. Д.) Определяются вфайл .plist, Примерно так (представление JSON):

children: [
    {
        position = {20,20};
    },
    ...
]

Так как позиция определяется в точках, а не в пикселях, все позиционируется, как ожидается, в соответствии с масштабом экрана устройства. За1x устройства позиция остается{20,20}, за2x положение{40,40} и для3x положение{60,60}.

проблема:

Проблема в том, что200x200px а также400x400px активыспособ малого для устройств iPad для достижения одинакового внешнего вида на всех устройствах.

Вопрос:

Как успешно представить / импортировать активы таким образом, чтобы я мог добиться одинакового (если не одного и того же) внешнего вида на всех устройствах / размерах экрана, не нарушая позиционирования дочерних узлов?

Мои берет:

Взять 1:

Я мог бы просто использовать существующий400x400px активы на устройствах без Retina iPad и600x600px активы на устройствах Retina iPad для домашнего узла, но позиционирование дочерних узлов будет нарушено. Это потому, что значение дочерней позиции не изменится и все равно будет{20,20} а также{40,40} для устройств iPad соответственно, тогда как активы будут больше. Это приведет к неточным дочерним позициям относительно домашнего узла.

Взять 2:

Я мог бы также масштабироватьSKScene размер (эффект увеличения) при использовании нормального200x200px а также400x400px размер активов для устройств iPad соответственно. Это работает и поддерживает позиционирование дочерних узлов в рабочем состоянии, но качество сцены / ресурсов отображается не так, как должно быть. Кроме того, это похоже на взлом, и мы не хотим этого.

Взять 3:

Я также мог бы использовать в два раза больше ресурсов для устройств iPad и удвоить положение дочерних узлов во время выполнения. В этом случае я бы использовал400x400px актив для устройств iPad, не относящихся к сетчатке, и новый800x800px актив для устройств Retina iPad. Хотя это выглядит великолепно и поддерживает работу позиционирования дочерних узлов, похоже, что это действительно большой хак, исправляющий положение дочерних узлов во время выполнения с помощью этого:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    position.x *= 2.0f;
    position.y *= 2.0f;
}

Спасибо, что нашли время, чтобы прочитать вопрос!

Ответы на вопрос(4)

Ваш ответ на вопрос