Перейти к содержимому


Фотография

GUI_GRID


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 08 June 2019 - 23:32

Здравствуйте, столкнулся с проблемкой которую не получается решить(мало работал с интерфейсом).

Есть интерфейс, основан на сеточной системе(GUI_GRID), который находится по центру экрана, и я хочу сделать так, что-бы он уезжал в сторону на всех разрешениях одинаково, но вот сделать нормальное вычисление не получается(нужно что-бы он уехал в начало по X).

 

createDialog "RscDisplayChat"; 
_display = (findDisplay 24); 
_ctrl = _display ctrlCreate ["IGUIBack", 123]; 
_ctrl ctrlSetPosition [(9 * (0.025) + (0)),(7 * (0.04) + (0)),(22 * (0.025)),(7 * (0.04))]; 
_ctrl ctrlCommit 0;

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:00

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


в-третьих, начало X и Y не находится на границе экрана
в-четвертых, используйте

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

как "исходные координаты" к которым уже прибавляете все ваши смещения, это позволит сделать интерфейс одинаковым на всех мониторах, а так же получить интерфейс относительно каких-то конкретных точек (Нижний край экрана, правый край экрана и т. д.)

Наглядная демонстрация координат UI

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание



Если конкретно нужен левый край монитора, то:

[safeZoneXAbs, Y, W, H] // Для трех мониторов
[safeZoneX, Y, W, H] // Для одного монитора

Сообщение отредактировал vlad333000: 09 June 2019 - 00:01

  • 0

#3 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 09 June 2019 - 00:02

SafeZone делает одинаковым в плане соотношения, а мне нужно именно окно одинакового размера на всех мониторах(так работает сетка). Pixel вроде по похожей схеме с safezone работает ?

P.S по всем этим ссылкам был, но так и не разобрался, для меня интерфейс это страшный сон.


Сообщение отредактировал nIkRon: 09 June 2019 - 00:04

  • 0

#4 OFFLINE   moroz89

moroz89

    Мл.сержант

  • Пользователи
  • 109 сообщений

Отправлено 09 June 2019 - 00:09

SafeZone может растягивать и сужать интерфейс в зависимости от соотношения сторон дисплея. Например при 25х9 интерфейс будет заметно растянут
  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:13

SafeZone делает одинаковым в плане соотношения

Я где-то говорил про размеры объектов? Не путайте размер и позиции!
Вы удивитесь, но вот этот код даст 3 одинаковых по размеру квадрата в разных местах несмотря на использование SafeZone!
// Левый край монитора
x = safeZoneX;
y = safeZoneY + safeZoneH / 2;
w = 4 * pixelGrid * pixelW;
h = 4 * pixelGrid * pixelH;
// Центр монитора
x = safeZoneX + safeZoneW / 2 - 4 * pixelGrid * pixelW / 2;
y = safeZoneY + safeZoneH / 2;
w = 4 * pixelGrid * pixelW;
h = 4 * pixelGrid * pixelH;
// Правый край монитора
x = safeZoneX + safeZoneW - 4 * pixelGrid * pixelW;
y = safeZoneY + safeZoneH / 2;
w = 4 * pixelGrid * pixelW;
h = 4 * pixelGrid * pixelH;
Это не взаимозаменяемые способы, А взаимодополняемые!

Сообщение отредактировал vlad333000: 09 June 2019 - 00:14

  • 0

#6 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 09 June 2019 - 00:14

SafeZone может растягивать и сужать интерфейс в зависимости от соотношения сторон дисплея. Например при 25х9 интерфейс будет заметно растянут

Вот из-за этого я и использую сетку. Проверил щас pixel систему в (RscTestGrids), окно так-же меняется при изменении разрешения, как и в случае c Safezone, поэтому в моем случае подходит только сетка.


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:19

поэтому в моем случае подходит только сетка

Используя сетку вы мешаете самому игроку, т. к. по мимо сохранения пропорций она так же сохраняет и размер на экране, таким образом ваш интерфейс на больших мониторах будет гигантским, а на маленьких миллиметровым и игрок не сможет это поправить с помощью масштабирования интерфейса в настройках видео
  • 0

#8 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 09 June 2019 - 00:22



 


поэтому в моем случае подходит только сетка

Используя сетку вы мешаете самому игроку, т. к. по мимо сохранения пропорций она так же сохраняет и размер на экране, таким образом ваш интерфейс на больших мониторах будет гигантским, а на маленьких миллиметровым и игрок не сможет это поправить с помощью масштабирования интерфейса в настройках видео

 

В Exile используется сетка, и проблем с ней у них я пока еще не видел, и мне нужно именно сохранение пропорций и размера на всех мониторах.
Наоборот, по моим наблюдениям, сетка остается неизменной на всех мониторах, тобишь само окно, одинаковое у всех, лишь меняется свободное пространство вокруг него.


Сообщение отредактировал nIkRon: 09 June 2019 - 00:26

  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:25

сохранение пропорций и размера

Вы удивитесь, но вот этот код даст 3 одинаковых по размеру квадрата в разных местах несмотря на использование SafeZone!

Это не взаимозаменяемые способы, А взаимодополняемые!

Все что вам нужно знать, вы опираетесь только на сетку, но опираться только на нее не возможно, вам так же нужен SafeZone
  • 0

#10 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 09 June 2019 - 00:29

 

сохранение пропорций и размера

Вы удивитесь, но вот этот код даст 3 одинаковых по размеру квадрата в разных местах несмотря на использование SafeZone!

Это не взаимозаменяемые способы, А взаимодополняемые!

Все что вам нужно знать, вы опираетесь только на сетку, но опираться только на нее не возможно, вам так же нужен SafeZone

 

Хорошо, как в моем случае, сохранить размеры окна для всех одинаковым(аля оставить сетку), но и подвинуть её в начало монитора для всех разрешений ?


  • 0

#11 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:32

но и подвинуть её в начало монитора для всех разрешений ?

мммм... а три куска кода я вам зачем привел?
  • 0

#12 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 09 June 2019 - 00:35

 

но и подвинуть её в начало монитора для всех разрешений ?

мммм... а три куска кода я вам зачем привел?

 

Ах да, позиция по X ведь не изменит размеры самого окна, лишь подвинет в нужно место. Спасибо!


  • 0

#13 OFFLINE   moroz89

moroz89

    Мл.сержант

  • Пользователи
  • 109 сообщений

Отправлено 09 June 2019 - 00:35

Vlad уже написал решение. Y,W и Н делаете, как вам надо, а Х ставите safezoneX
  • 0

#14 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:44

Коротко и быстро (W и H - ширина и высота, dX и dY - смещение по X и Y от опорной точки, .../... - позиция опорной точки):
// Left/Top
x = safeZoneX                         + dX;
y = safeZoneY                         + dY;
// Left/Center
x = safeZoneX                         + dX;
y = safeZoneY + safeZoneH / 2 - H / 2     ;
// Left/Bottom
x = safeZoneX                         + dX;
y = safeZoneY + safeZoneH     - H     - dY;
// Center/Top
x = safeZoneX + safeZoneW / 2 - W / 2     ;
y = safeZoneY;                        + dY;
// Center/Center
x = safeZoneX + safeZoneW / 2 - W / 2     ;
y = safeZoneY + safeZoneH / 2 - H / 2     ;
// Center/Bottom
x = safeZoneX + safeZoneW / 2 - W / 2     ;
y = safeZoneY + safeZoneH     - H     - dY;
// Right/Top
x = safeZoneX + safeZoneW     - W     - dX;
y = safeZoneY                         + dY;
// Right/Center
x = safeZoneX + safeZoneW     - W     - dX;
y = safeZoneY + safeZoneH / 2 - H / 2     ;
// Right/Bottom
x = safeZoneX + safeZoneW     - W     - dX;
y = safeZoneY + safeZoneH     - H     - dY;

Сообщение отредактировал vlad333000: 09 June 2019 - 01:03

  • 1

#15 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3189 сообщений
  • Откуда:Кострома

Отправлено 09 June 2019 - 00:50

UPD: Обновил, добавил смещение, если его нет в формуле, то особого смысла в нем тоже нет

Сообщение отредактировал vlad333000: 09 June 2019 - 00:51

  • 0

#16 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 157 сообщений
  • Откуда:Донецк

Отправлено 09 June 2019 - 01:21

Вот что сделал, даже менять X в конфиге не нужно будет:

 

createDialog "RscDisplayChat"; 
_display = (findDisplay 24); 
_ctrlBack = _display ctrlCreate ["IGUIBack", -1]; 
_ctrlBack ctrlSetPosition [(1 * (0.025) + (0)),(1 * (0.04) + (0)),(38 * (0.025)),(23 * (0.04))]; 
_ctrlBack ctrlCommit 0;

_ctrlEdit = _display ctrlCreate ["RscEdit", -1]; 
_ctrlEdit ctrlSetPosition [(2 * (0.025) + (0)),(2 * (0.04) + (0)),(35 * (0.025)),(18 * (0.04))]; 
_ctrlEdit ctrlCommit 0;

_ctrlButton = _display ctrlCreate ["RscButton", -1]; 
_ctrlButton ctrlSetPosition [(2 * (0.025) + (0)),(21 * (0.04) + (0)),(8 * (0.025)),(2 * (0.04))]; 
_ctrlButton ctrlCommit 0;

_ctrlButton1 = _display ctrlCreate ["RscButton", -1]; 
_ctrlButton1 ctrlSetPosition [(11 * (0.025) + (0)),(21 * (0.04) + (0)),(8 * (0.025)),(2 * (0.04))]; 
_ctrlButton1 ctrlCommit 0;

_ctrlButton2 = _display ctrlCreate ["RscButton", -1]; 
_ctrlButton2 ctrlSetPosition [(20 * (0.025) + (0)),(21 * (0.04) + (0)),(8 * (0.025)),(2 * (0.04))]; 
_ctrlButton2 ctrlCommit 0;

_ctrlButton3 = _display ctrlCreate ["RscButton", -1]; 
_ctrlButton3 ctrlSetPosition [(29 * (0.025) + (0)),(21 * (0.04) + (0)),(8 * (0.025)),(2 * (0.04))]; 
_ctrlButton3 ctrlCommit 0;

_centerPos = (1 * (0.025) + (0)); // Центральная позиция от которой мы отталкиваемся aka самая ближняя кнопка к левой стороне экрана.

{
	_x ctrlSetPositionX (safeZoneX + (((ctrlPosition _x) select 0) - _centerPos)); 
	_x ctrlCommit 2;
} forEach [_ctrlBack, _ctrlEdit, _ctrlButton, _ctrlButton1, _ctrlButton2, _ctrlButton3];

Сообщение отредактировал nIkRon: 09 June 2019 - 01:29

  • 0




Яндекс.Метрика