Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

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


DarkMaster
 Share

Recommended Posts

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

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

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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".
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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>

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use