Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Размер виджетов - абсолютен или нет ?


DarkMaster

Рекомендуемые сообщения

Столкнулся с проблемой следующего характера:

В аддоне есть TextView - жестко заданого размера напрмиер 80 ( пикселей по идее ). У меня на разрешении 1280х1024 полноэкранный, текст отображаеться в нем коректно, стоит перейти на более мелкое расширение или выйти из поноэкранного режима в оконный ширина как бы меняеться тоесть становиться меньше ( такое ощущение что 80 пикселей XDB файла в разрешении 1024х768 это уже не 80 а 72 или гдето около того ) и текст начинает обрезаться..... Кто нибудь знает из за чего это может быть и как пофиксить ? Any ideas ? *)))) Я четсно говоря немного в шоке *))) Думаеться мне что пидеться пресчитывать ширину виджетов при старте аддона отталкиваясь от widgetsSystem:GetPosConverterParams() 8((((

Ссылка на комментарий
Поделиться на другие сайты

Все виджеты и шрифты scale'ятся в зависимости от резолюции игры. Всегда.

Базовая резолюция, для которой нужно проектировать аддон - 1280x1024. При других резолюциях, размеры ВСЕХ виджетов увеличиваются/уменьшаются пропорционально высоте экрана (или высоте окна, если оконный режим).

Но здесь нет никакой проблемы, всё именно так и должно быть.

Именно поэтому, проектируя аддон, нужно использовать виртуальные координаты.

EDIT: Через 20 минут напишу подробнее.

Ссылка на комментарий
Поделиться на другие сайты

Ок жду развернутого ответа, с примерами *) Как сделать так чтобы размер текста менялся при изменени разрешения экрана. *)))

Ссылка на комментарий
Поделиться на другие сайты

Quote:
Размер виджетов - абсолютен или нет?

Визуально (т.е. в реальных координатах) - НЕТ.
За то, в ВИРТУАЛЬНЫХ координатах - ДА, АБСОЛЮТЕН.

Имхо, нужно заменить во всей иерархии виджетов, WIDGET_ALIGN_LOW_ABS на WIDGET_ALIGN_LOW, и все виджеты станут располагаться и масштабироваться в ВИРТУАЛЬНЫХ координатах - то, что доктор прописал.

EDIT: Кстати, все шрифты будут масштабироваться вместе с виджетами. Размеры шрифтов я тоже всегда указываю, на всякий случай. Размеры шрифтов тоже, кстати, измеряются в тех же самых виртуальных единицах. Т.е. если указал "10", то это всегда 10 виртуальных единиц, что в реальных единицах может быть больше или меньше, но это не должно никого заботить. Так и должно быть, так работает весь интерфейс в АО.

В общем, это будет в учебнике, но ещё не успел написать про резолюции игры, так что, пишу сейчас:
---------------------------------------------------

Все виджеты в игре (оригинальные и пользвательские) масштабируются зависимо от резолюции игры. Если резолюция 1280x1024, то высота экрана 1024, и все они будут выглядеть 1:1 как нарисовано в текстурах (поэтому, проектировать аддон нужно именно под резолюцию 1280x1024). Однако, если резолюция другая, то все виджеты меняют размер пропорционально высоте экрана. Соответственно, меняют и расположение.

Поэтому, в аддонах, нужно использовать виртуальные координаты. Что это такое? Функция widgetsSystem:GetPosConverterParams() наглядно объясняет, что такое виртуальные координаты, и как они соотносятся с реальными. Например, при резолюции 1920x1200, эта функция выдаёт такую структуру:

Code:
fullVirtualSizeX = 1638.4001464844
fullVirtualSizeY = 1024
referenceVirtualSizeX = 1280
referenceVirtualSizeY = 1024
realSizeX = 1920
realSizeY = 1200

Внимательно посмотрите, и всё станет понятно:

fullVirtualSize - текущий реальный размер экрана - 1920x1200.
referenceVirtualSize - это константы, и они всегда равны 1280 и 1024.
fullVirtualSize - ВИРТУАЛЬНЫЕ КООРДИНАТЫ, это то, что нам нужно.

Поскольку пропорции экрана в приведённом примере 16:10, то виртуальные координаты получились 1638x1024, причём, ширина вышла дробным числом, но это не существенно. Заметьте, как игра вычисляет fullVirtualSize:

fullVirtualSizeY = referenceVirtualSizeY
fullVirtualSizeX = fullVirtualSizeY * (realSizeX / realSizeY)

Вот именно в пространстве этих ВИРТУАЛЬНЫХ координат, и должны располагаться ВСЕ виджеты в каждом аддоне.
Для этого, проектируйте аддон под резолюцию 1280x1024, и ВСЕ виджеты в аддоне, нужно располагать одним из этих способов:

WIDGET_ALIGN_LOW - виртуальные координаты, отсчёт от левого (для X) или верхнего (для Y) края материнского виджета. Нужно указать <Pos> и <Size>.
WIDGET_ALIGN_HIGH - виртуальные координаты, отсчёт от правого (для X) или нижнего (для Y) края материнского виджета. Нужно указать <HighPos> и <Size>.
WIDGET_ALIGN_CENTER - располагать НЕ по X/Y, а просто в центре материнского виджета (или экрана, если виджет старший). Нужно указать <Size>.
WIDGET_ALIGN_BOTH - ? (думаю, виджет произвольного размера, с фиксированными отступами от обоих краёв материнского виджета. Чтобы его размеры менялись вместе с материнским виджетом, если размеры последнего будут менятся в ВИРТУАЛЬНЫХ единицах (программно из скрипта, или пользователем, с помощью мыши). Видимо, нужно указать <Pos> и <HighPos>.

(Про способы расположения, в учебнике будет гораздо подробнее)

Запомните, самый популярный способ расположения виджета - WIDGET_ALIGN_LOW.

И никогда, НИКОГДА!, нельзя нигде пользоваться WIDGET_ALIGN_LOW_ABS, т.к. это означает расположение в РЕАЛЬНЫХ координатах (ABS = абсолютные) от верхнего-левого угла. А реальные координаты у всех разные. Поэтому, НИКОГДА не пользуйтесь этим способом, название которого заканчивается на "_ABS".
Ссылка на комментарий
Поделиться на другие сайты

Везде стоит WIDGET_ALIGN_LOW во всех виджетах ..... Не помгло. SLA если будет минутка времени посмтри тоже. Просто установи аддон, и зайди в гиру убей пару мобов, посмтри как отображает правльно на разрешени 1280x1024 переключись на 1024х768 снова посмотри..... Может ты поймешь чего я не понимаю. Такое ошушения что шрифт не меняет размер....

Ссылка на комментарий
Поделиться на другие сайты

Quote:
Такое ошушения что шрифт не меняет размер....

Меняет. Я сделал скриншоты и сверил - размер шрифтов разный, как и должно быть.

Проблема была в другом. В общем, строки в аддоне DarkDPSMeter обрезаются в местах пробелов, и окончание строки заменено на многоточие (...), заметил? Это потому, что движок рендеринга шрифтов АО решил, что текст не влезает в контейнер... Здесь грабли были в том, что высота шрифта и его размер -- это, мягко говоря, совершенно разные вещи :) В типографии есть несколько способов измерения высоты шрифта. Так, например, шрифт размером 12 pt занимает 16 пикселей в высоту. А 11 pt = 15 пикселей, а 10 pt = 13 пикселей.

Как вычислять минимальную высоту WidgetTextView:

Берём из TXT-файла указанный "fontsize", он измеряется в pt.
Переводим его в px, и записываем в (WidgetTextView).xdb файле, в <Placement> \ <Y> \ <Size>.
Вот таблица конвертирования pt в px (Points в Pixels):
http://reeddesign.co.uk/test/points-pixels.html

Конкретно в аддоне DarkDPSMeter:

Поскольку в DamageStats.txt указано fontsize="11", то нужно в DamageStats.(WidgetTextView).xdb выставить высоту контейнера как минимум 15 (у тебя там было 12 -- в этом и была вся проблема).

В принципе, пофиг, что высота материнской панели прогрессбара чуть меньше (14 пикселей), текст просто обрежется снизу на один виртуальный пиксель, если не влезет). В резолюциях 1024x768 и 800x600 всё хорошо, я проверил. Ну а в оконном режиме не проверял, там окно можно сделать произвольного размера, например, очень маленькое. Советую тоже попробовать. Если будет обрезаться слишком сильно, то это можно исправить, увеличив высоту панели прогрессбара с 14 до 15 пикселей - тогда будет 100% гарантия, что всё всегда будет отлично влезать.

DarkMaster, не забудь такие исправления ввести во все свои *.(WidgetTextView).xdb файлы.

DamageStats.(WidgetTextView).xdb с высотой 15 виртуальных пикселей:

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<WidgetTextView>
<Priority>150</Priority>
<Name>SpellDetailTextViewStats</Name>
<Placement>
<X>
<Align>WIDGET_ALIGN_LOW</Align>
<Pos>105</Pos>
<Size>110</Size>
</X>
<Y>
<Pos>0</Pos>
<Size>15</Size>
</Y>
</Placement>
<TransparentInput>true</TransparentInput>
<Visible>true</Visible>
<Enabled>true</Enabled>
<FormatFileRef href="DamageStats.txt" />
<TextValues />
</WidgetTextView>

Ссылка на комментарий
Поделиться на другие сайты

Огромное спасибо теперь буду знать где собака порыта, и не подкалыватсья впредб с высотой текстов *))))) Исправлю везде и обновлю версию

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования