Исходя из вопроса о соотношении сторон , мне интересно услышать, что другие люди используют при работе над 2D-системами пользовательского интерфейса (скорее всего, их собственными доморощенными решениями). В частности, как вы справляетесь с системами координат. На мой взгляд, есть три варианта:
- Жестко запрограммированные координаты (например: 0 -> 720, 0 -> 576)
- Нормализованные координаты (0.0 -> 1.0, 0.0 -> 1.0), отображенные в реальные координаты перед рендерингом
- Виртуальные координаты (например: 0 -> 1600, 0 -> 1000), отображенные в реальные координаты перед рендерингом
Жесткое кодирование, очевидно, полезно только в том случае, если вы работаете на стационарной платформе и заранее знаете, каковы ваши координаты пространства экрана, или если вы готовы создавать макеты экрана для каждого возможного набора размеров экрана.
Нормализованные координаты хороши, но страдают от неоднозначности, когда соотношение сторон экрана не фиксировано (например, 0,75 соответствует другой физической координате при работе в широкоэкранном режиме, чем в 4: 3). Кроме того, для авторов действительно нелогично объявлять элемент пользовательского интерфейса равным (0,2 x 0,2) только для того, чтобы обнаружить, что он фактически не квадратный при рендеринге.
Виртуальные координаты недвусмысленны, но страдают от тех же проблем, что и нормализованные координаты на этапе переназначения: крошечное десятичное расхождение может приводить к ошибкам «один на один», что означает, что элементы пользовательского интерфейса, которые должны располагаться на плитке, теперь имеют шов между ними.
Точно так же, когда у вас есть экран с фиксированным разрешением, как нормализованные, так и виртуальные координаты означают, что очень трудно гарантировать отображение 1: 1 между тщательно созданными пикселями вашего художника в изображении пользовательского интерфейса и пикселями на экране, что означает, что вы рискуете неприятные артефакты масштабирования (при условии, что вы визуализируете как текстурированные квадраты на экране).
Мы выбрали виртуальный координатный подход, особенно во избежание двусмысленности в отношении соотношений сторон. Поэтому при рендеринге на экран 16:10 пространство пользовательского интерфейса составляет (0,0) -> (1600,1000), но при рендеринге в формате 4: 3 используемое пространство пользовательского интерфейса на самом деле (133,0) -> (1467). , 0).
Есть ли лучшие решения, о которых я просто не знаю? Есть ли хорошие стратегии для минимизации проблем, которые есть у этих трех подходов?
Многое зависит от типа игры и ситуации. Для быстрых и грязных прототипов я предпочитаю планировать пользовательский интерфейс на миллиметровой бумаге, записывать список числовых координат для фиксированного размера окна и жестко кодировать все - для меня это проще и быстрее. Но для «реального» проекта, в котором вы хотели бы иметь изменяемые размеры окон или альтернативные разрешения экрана, это, очевидно, не было бы идеальным, и было бы лучше какое-то решение, позволяющее масштабировать в обоих направлениях.
источник