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

Я не знаю, как добавить узлы в свою сцену, чтобы они имели одинаковый размер и отображались в одном и том же месте на всех устройствах.

введите здесь описание изображения

Например, кнопка «Назад». Вот как я устанавливаю его положение в своей сцене:

class StoreScene: SKScene {
  override func didMove(to view: SKView) {
    let backButton = ActionNode(texture: SKTexture(imageNamed: "backButtonOrange"))
    backButton.position = CGPoint(x: self.size.width/2 * 0.65 * -1, y: self.size.height/2 * 0.85 * -1)
    [..]
  }
}

Он выглядит нормально на всех устройствах, кроме iPhone X, на котором масштабирование тоже кажется неправильным.
Использование изображений @2x и @3x или pdf ничего не меняет. Размер моих сцен установлен на iPhone 6s Plus с аспектным заполнением в качестве режима масштабирования. Изменение режима масштабирования приводит к аналогичным проблемам.

Я уже читал Руководство по человеческому интерфейсу Apple и искал похожие вопросы, но не смог найти решение проблемы.


person zte    schedule 01.02.2018    source источник
comment
трудно понять, слишком мало деталей. Вы убедились, что SKView находится в безопасной зоне?   -  person sabi    schedule 05.02.2018
comment
@sabi На самом деле я не использую какую-либо безопасную зону, только обычный размер экрана 6s Plus. Как сказал KnightOfDragon ниже, использование безопасной зоны приведет к пустой трате места на iPhone X, и это не то, что я хочу делать.   -  person zte    schedule 05.02.2018


Ответы (1)


Причина, по которой ваш масштаб «неправильный», заключается в том, что вы используете аспектФилл, а iPhone X имеет другое соотношение сторон, чем другие iPhone. (39/18 против 16x9) У вас есть как минимум 2 варианта:

1) Установите безопасную зону таким образом, чтобы ваша безопасная зона была 16:9. Лично мне это не нравится, потому что вы тратите впустую ценную недвижимость, а эти люди заплатили за телефон, который идет на край.

2) Создайте размер сцены таким образом, чтобы он поддерживал несколько соотношений сторон. Лично мне нравится разрабатывать свою сцену в виде квадрата и накладывать на него различные узлы аспектного слоя, чтобы убедиться, что она хорошо выглядит на всех устройствах.

person Knight0fDragon    schedule 05.02.2018
comment
Да, мне тоже первая не нравится. Можете ли вы объяснить свой 2-й пункт более подробно? - person zte; 05.02.2018