Вопрос Как адаптировать UI под все разрешения экрана?

  • 117
  • 7
  • 48
Контакты для связи отсутствуют.
Я знаю про ScrW() ScrH(), умею ими пользоваться и т.д. Но не понимаю сам принцип того, как точно адаптировать это все
Тогда это в корне убивает твои навыки, если ты знаешь как пользоваться ScrW() ScrH(), вопросов не должно быть. Принцип ровно такой: есть икс и игрик (верхний левый угол), если будешь использовать ScrH() - то точка отчета будет идти не с верху - вниз, а наоборот. Следовательно строй худ под свой монитор с использованием как простых значений, так и комбинируй с ScrW(), ScrH(). Вроде бы ничего сложного, а такой странный вопрос.
 
  • 246
  • 13
  • 53
Тогда это в корне убивает твои навыки, если ты знаешь как пользоваться ScrW() ScrH(), вопросов не должно быть. Принцип ровно такой: есть икс и игрик (верхний левый угол), если будешь использовать ScrH() - то точка отчета будет идти не с верху - вниз, а наоборот. Следовательно строй худ под свой монитор с использованием как простых значений, так и комбинируй с ScrW(), ScrH(). Вроде бы ничего сложного, а такой странный вопрос.
Вопрос не в том, что бы мне объяснили как играть с этой хуйней, я изначально попросил просто дать пример какого то кода что бы я визуально понял, как оно работает
 
  • 214
  • 16
  • 69
  1. Скачиваешь мою библиотеку интерфейса
  2. Пишешь интерфейс не думая о ScrW() функции и ScrH(). Просто указываешь числовое значения относительно своего монитора, например 400, 600, и так далее
  3. Все числовые значения вкладываешь в функции FatedUI.func.w() и FatedUI.func.h()
  4. Итого, любой элемент без адаптивной вёрстки будет автоматически переводиться в нужный размер при изменении разрешения
Пример:
local menu = vgui.Create('DFrame')
menu:SetSize(FatedUI.func.w(600), FatedUI.func.h(500))
menu:Center()
menu:MakePopup()
menu:SetTitle("Adaptive size")

Обычно я main frame (тот же dframe) делаю через адаптивное разрешение, а остальным элементам присваиваю размер относительно родителей
 
  • 246
  • 13
  • 53
  1. Скачиваешь мою библиотеку интерфейса
  2. Пишешь интерфейс не думая о ScrW() функции и ScrH(). Просто указываешь числовое значения относительно своего монитора, например 400, 600, и так далее
  3. Все числовые значения вкладываешь в функции FatedUI.func.w() и FatedUI.func.h()
  4. Итого, любой элемент без адаптивной вёрстки будет автоматически переводиться в нужный размер при изменении разрешения
Пример:
local menu = vgui.Create('DFrame')
menu:SetSize(FatedUI.func.w(600), FatedUI.func.h(500))
menu:Center()
menu:MakePopup()
menu:SetTitle("Adaptive size")

Обычно я main frame (тот же dframe) делаю через адаптивное разрешение, а остальным элементам присваиваю размер относительно родителей
У тебя библиотека хуёвая, отпадающая от сервера после того, как поставишь ее на хост
 
  • 1
  • 0
Контакты для связи отсутствуют.
Lua:
local scrsize = ScrW()
local function adapt(arg)
    return arg / 1920 * scrsize
end
Используешь эту функцию там где нужно, например:

draw.RoundedBox(16, adapt(200), adapt(100),adapt(300),adapt(100), Color(255,255,255,255))

само название функции можно укоротить, я просто привел как пример
 
  • Nellored
  • Модератор раздела "Garry's Mod"
  • 831
  • 160
  • 174
пользуюсь этим
Lua:
local ScrH = ScrH
local ideal = 1080
local floor = math.floor

function ScreenScale(sz)
    return floor(sz * (ScrH() / ideal))
end
 
Сверху Снизу