Ожидаемый контент:

...

Карты, моды, дополнения, утилиты...

...

... и другое

В разработке... (Внимание: это меню отображается некорректно на некоторых стилях форума)

DOOM 0.9.1282

Форум Мапперов и Doom'еров

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум Мапперов и Doom'еров » Уроки » GUI и все что с ними связано.


GUI и все что с ними связано.

Сообщений 1 страница 23 из 23

1

Кароче вот, GUI. Думаю объяснять что это смысла нет, это и так все знают. Перейду сразу к делу.

СОЗДАНИЕ СВОЕГО GUI
====================
Этап номер один:
=======
Для начала нужно открыть редактор gui, сделать это можно так - ввести в консоль игры команду EditGUIs

=======
Этап номер два:
====
После ввода команды открывается редактор, и мы видим там  кхмм... почти ниче не видим, дааа.... рис. 0
Чтобы что либо начать уже наконец видеть мы жмем на меню File -> New, появляется наш долгожданный (пока еще абсолютно пустой gui) - рис. 1. Не знаю как у вас, но у меня стоит галочка в пункте меню View -> Show Grid, так же советую и вам ее обязательно поставить ( хотя бы на ранней стадии создания гуи, чтобы хотябы видеть его края, да и вообще штука оч полезная... ). Так же рекомендую в том же меню поставить галочку и на Snap To Grid, что заставит все ваши объекты прилипать к сетке и гуи будут ровные ( в случае если же вам нужно будет расположить объект так, как того не позволяет сделать сетка, стоит временно снять галочку и расположить так как вам угодно, а затем снова ее вернуть). Так же, вам обязательно понадобится окно Navigator, по умолчанию оно и так вроде всегда включено, но кто знает... Если это не так, то включить его можно поставив галку в меню Window -> Show Navigator. Ну вот вроде и все с настройками.

=======
Этап намбэр тхри:
Переходим от слов к делу.
====
Итак ознакомимся с основными элементами редактора gui :
Узреть их можно щелкнув правой кнопкой мыши в любом пустом месте нашего нового гуишника и в появившемся меню навести мышь на слово "New", а так как на нем сейчас нихрена кроме черной непроглядной пустоты нет - жмем по любому месту.
Итак проделав эту нехитрую операцию (наведя мышь на пункт New)  мы видим, что справа появился списочек, содержащий вот эти непонятные словосочетания: (рис. 2)
      WindowDef
      editDef
      htmlDef
      ChoiceDef
      SliderDef
      bindDef
      listDef
      RenderDef
Это и есть весь набор инструментов, из которых состоят абсолютно все ГИП'ы дума 3.

=======
Этап номер 4:
Ну и че это такое, а?
===
Тут объясняю что есть что, значится так:

WindowDef - Это самый распространенный элемент гуишников, им в гуи добавляют картинки, текст, делают задний фон, так же его можно использовать как таймер.
EditDef - Поле ввода какого либо текста (кароче видели полосу куда текст вводишь, когда в сетевой в чате болтаете? - это и есть EditDef ).
HtmlDef - Сам я этим не пользовался и не пользуюсь, поэтому ничего конкретного сказать не могу, но думается мне что это тот же WindowDef, но с поддержкой оформления при помощи тегов. Да и к тому же когда вы выбираете его, он не появляется все равно, так что советую про эту штуковину сразу забыть.
ChoiceDef - Не знаю как у кого, но у меня как только я добавляю эту хреновину в гуи, редактор тут же вылетает.
Можете попробовать сами и если у вас все будет норм, то отпишите тут что это за зверь такой.
SliderDef - Предполагается что это слайдер, то бишь ползунок (ну типа той штуки которой вы в настройках туда сюда уровень звука например меняете). Но как не странно мой редактор так же молниеносно вылетает при добавлении этого чуда, как и при добавлении Choice Def.
bindDef - Ну эта штуковина используется кароче для отображения того, какая клавиша соответствует той или иной системной команде дума, для вас эта штуковина будет бесполезной, так что углубляться не буду.
ListDef - И снова вылет...  :no:
Ну и наконец RenderDef - Ниразу этим не пользовался, так что инфы нет, но думается мне это область, в которой будет прорисовываться некоторая 3d графика, типа того как в главном меню торчит планета марс. Хорошо уже хотяб то, что не вылетает ).

Исходя из всего выше написанного, можно сделать вывод, что действительно нужными, и работоспособными являются только вот эти компоненты - WindowDef и EditDef. Но не спешите рыдать, их вполне хватит для того чтобы сделать отличный гуи. Если вы не знали, то вот вам факт - примерно 75 процентов всех ГИП'ов в думе сделаны из одних лишь WindowDef'ов.

=======
Этап номер пять:
====
Чтож приступим непосредственно к созданию гуи.
Для этого жмем правую кнопку, выбираем New -> WindowDef. Дальше решаем, что нам нужно, как мы используем его, напишем ли в нем текст, загрузим в него картинку или же сделаем его задним фоном.
Начинать все гуи я рекомендую всегда сперва создавая задний фон для гуи.

Отредактировано jONNY[ReWIRE] (17-02-2011 00:22:28)

+3

2

рис. 0

0

3

рис. 1

0

4

рис. 2

0

5

Итак, как я и рекомендовал - создаем задний фон для нашего гуи, он нужен чтобы гуи не просвечивал и за ним не было видно модели, на которую вы ложите этот гуи.
Создав WindowDef щелкните по нему правой кнопкой в окне Navigator и выбирите в списке пункт Properties... (То бишь свойства), так же можно нажать Alt + Enter - это приведет к тому же результату - откроется окно свойств этого элемента.
В этом окне есть 4 вкладки : General, Image, Text, Keys.

Вкладка General:

На этой вкладке можно сменить имя компонента в поле "Name:" с unnamed на нечто более вразумительное, настоятельно рекомендую всегда давать объектам осмысленные имена, если в дальнейшем вы планируете использовать их для какаих либо скриптовых событий в гуи.

Поле "Type:" Трогать не стоит, там обозначен класс объекта.

Так же в группе "States" имеются галочки :

Visible - указывает будет ли данный WindowDef виден.
NoEvents - указывает будут ли обрабатываться скриптовые события в этом WindowDef. (Если он содержит скрипт, но NoEvents выставлен в 1, то скрипт не будет обрабатываться (то бишь работать xD ).
NoTime - Параметр нужный при использовании элемента в качестве таймера. Если галочки нет - то отсчет времени в нем начинается сразу при загрузке карты, если же галочка стоит - отсчет времени начнется только после того, как в скрипте самого гуи будет командой запущен таймер.
NoClip - Не использовал, так что инфы нет.
NoCursor - Показывает, будет ли виден курсор при наведении мыши на этот элемент.

Отредактировано jONNY[ReWIRE] (17-02-2011 00:27:17)

+1

6

Вкладка Image:

Как раз та самая вкладка, что нам нужна, именно на ней и можно задать нашему WindowDef'у цвет заднего фона.
Ставим галочку на "Backcolor:" (этим параметром задается цвет полностью всего нашего WindowDef'а), и в первом поле выбора цвета выбираем черный цвет (как на рисунке), во втором белый (он там и будет белым по умолчанию).

Теперь поясню, что это значит - первый выбор цвета(черный) это сам базовый цвет, в который будет окрашен элемент, второй выбор цвета (белый) задает прозрачность первого цвета, если выбрать первым цветом красный, а вторым серый, то получаем полупрозрачный красный цвет. Как вы поняли во втором выборе цвета чем темнее берем - тем прозрачнее базовый цвет, и наоборот, чем светлее, тем он менее прозрачный.

Так же под этим всем есть галка "Material:" она нужна для того чтобы грузить в этот WindowDef текстуры (картинки). В поле ввода необходимо вписать путь к материалу ( посмотреть путь к нужным материалам можно командой TestImage находясь в игре ).
Значениями "X Scale" и "Y Scale" можно масштабировать картинку внутри, соответственно по Х и У осям.
Галка "Disable Cache" особой погоды вам не даст, так шо забудьте о ней сразу.

Под этим находится группа "Border" - эта штуковина задает рамку по краям компонента WindowDef, чтобы активировать ее, впишите в поле "Size:" значение, отличное от нуля. Галкой "Color:" можно, как то описано выше, выбрать цвет и прозрачность этой рамки. Ну и параметром "Material" можно задать этой самой рамке текстуру.

И самая нижняя группа "General" содержит параметр "Matcolor:" - он задает цвет текстуры, если вы загрузили ее, поставив галочку "Material" в группе "Background".

Отредактировано jONNY[ReWIRE] (17-02-2011 00:50:07)

0

7

Вкладка Text:

Ну тут все предельно ясно, это - текст.

Ставьте галочку на "Text:" и в поле ниже вводите текст, который хотите видеть в этом компоненте.

Раскрывающийся список "Font:" особой погоды тоже не играет, так как в нем всего 1 шрифт - текущий.
В поле "Scale:" обозначен размер шрифта. Размер надо вводить с клавиатуры, например поставьте курсор в это поле и введите 0.5 и размер шрифта уменьшится в 2 раза.
"Color:" задает цвет и прозрачность текста.
"Alignment:" - указывает расположение текста внутри элемента, Left - слева направо, Center - по центру, Right - Справа налево.
"X:" и "Y:" - смещения текста по осям на указанные единицы.
Галочка "NoWrap" - Если стоит - то запрещается автоматический перенос текста на следующую сроку.

0

8

Вкладка Keys:

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

Единственные параметры которые нам тут могут пригодитсья это:
"rect" - указано расположение элемента на поверхности гуишника ( его координаты ).
"forecolor" - здесь в цифровом виде указан цвет шрифта текста.
"matcolor" - в цифровом виде указан цвет материала ( текстуры, если она выбрана).

Остальные параметры не особо важны и задать их можно в предыдущих вкладках.

Так же есть кнопки Add ( Добавить параметр) , Edit (редактировать параметр) и Delete (удалит параметр).

0

9

Итак, теперь мы знаем что это за вкладки в меню Properties и умеем делать все базовые операции с оформлением гуи. Так же, у нас уже есть WidowDef с заданным задним черным фоном ( я дал ему имя Back, как видно на рисунке). Теперь мы должны растянуть его по всему гуи. Делаем.

Все. Фон готов. Теперь займемся смысловым наполнением нашего гуи.

Отредактировано jONNY[ReWIRE] (17-02-2011 06:38:05)

0

10

Добавим в него какой нибудь текст. Создаем еще 1 WindowDef и вводим в него текст "Заголовок этого Гуи", как это сделать написано выше (в описании вкладки Text ). Цвет шрифта сменим на светло зеленый, размер шрифта оставим стандартным - 1.0 . Теперь на нашем гуи появился текст, растяните его по поверхности гуи так, чтобы вся надпись была видна, затем можете расположить его в нужном вам месте.

Вот. Так можно создавать текст.

0

11

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

Чтож, сделать это можно нажав Ctrl + T , или же зайти в меню Tools и выбрать там пункт "Viewer". Так как это новый гуи, перед тем как запустить просмотр, редактор попросит вас сперва сохранить гуи. Сохраняем в любое место. После сохранения мы получаем то, чего так хотели - открывается миниатюрный просмотровщик гуи, в нем можно видеть, как будет работать гуи, находясь на карте.

Кстати в появившемся окне есть кнопка паузы, ей можно остановить анимацию гуи, если таковое желание у вас возникнет. Чтобы закрыть окно просмотра, закройте его через кнопку "х" в правом вернем углу окошка.

Отредактировано jONNY[ReWIRE] (17-02-2011 07:15:35)

0

12

Чтож, текст создавать мы научились. Поздравляю. Пора перейти к более интересным вещам )).
Добавляем картинки (текстуры) в наш гуи.

Итак, создаем новый WindowDef, открываем его свойства ("Properties..."), переходим во вкладку "Image".

Там ставим галочку "Material" и в поле ввода вводим путь к нужной картинке, который мы посмотрели через TestImage, вводим вот это "guis/assets/common/pictowarning".

Затем можно задать цвет нашей текстурке, для этого в самом низу выставляем "Matcolor:" в темно зеленый.

И получаем вот это:

Отредактировано jONNY[ReWIRE] (17-02-2011 07:26:59)

0

13

Располагаем этот рисунок как нам угодно. Добавлять картинки теперь мы тоже научились.
Чего же еще желать от гуи то, вроде все есть - картинки, текст. Но ведь нам бы еще хотелось чтобы наш гуи как то взаимодействовал с его внутренними объектами и внешними объектами на карте? Верно.

Итак начнем с простенького.

Тут я перечислю ряд команд, которые можно использовать в гуи:
Все их нужно вписывать в скрипт нашего гуи, чтобы туда попасть - выделяем какой либо объект ( тот что будет активировать нужные нам действия) и в окне Navigator щелкая по нему правой кнопкой выбираем пункт "Script..." или же жмем Ctrl + Enter.

Отредактировано jONNY[ReWIRE] (17-02-2011 17:08:09)

0

14

Итак, вы сделали это, перед вами появилось окно с названием "Item Scripts" - это и есть редактор скриптов для этого элемента.

Теперь рассмотрим пример, в котором при щелчке по зеленому значку восклицательного знака - он будет пропадать (становиться невидимым).

===============
//Текст написанный в редакторе скрипта

OnAction // Событие гуи - при щелчке по объекту
{
     set "texturka::visible" "0"; // задаем видимость текстурки в 0 ( скрыть), 1 соответственно - показать.
}

// Все, теперь при шелчке по зеленому значку он исчезнет из виду
//Рассмотрим еще пару полезных функций:

OnMouseEnter   //Событие гуи - при наведении курсора мыши на объект
{
      transition "texturka::matcolor" "0,0.50196081,0.25098041,1" "0.50196081,0.50196081,0.50196081,1" "400"; // Заставит значок плавно изменить свой цвет в серый, при наведении на него мыши.
}

OnMouseExit    //Событие гуи - при отводе курсора мыши от объекта
{
      transition "texturka::matcolor" "0.50196081,0.50196081,0.50196081,1" "0,0.50196081,0.25098041,1" "400";      // Заставит значок плавно вернуться из серого в зеленый цвет.
}

==========================

В результате написаниия этого скрипта мы получаем гуи, в котором при наведении мыши на зеленый значек воскл. знака он плавно становится серым, при отводе курсора - он так же плавно возвращает свой первоначальный цвет. При нажатии по значку - он исчезает.

Отредактировано jONNY[ReWIRE] (17-02-2011 16:47:08)

0

15

Итак, пояснения:
В событие OnAction{} мы пишем все что должно происходить при нажатии на элемент, в OnMouseEnter {} - все что должно происходить при наведении курсора на элемент, в OnMouseExit {} - все что произойдет когда вы отведете курсор от элемента.

Set "texturka::visible" "0"; - задает видимость (::visible) для элемента (texturka - то есть для самого себя) в "0"; - что означает что объект должен исчезнуть, 1 - появиться.

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

transition "имя элемента, в нашем случае texturka::параметр, который надо изменить, в нашем случае - matcolor" "начальный параметр" "параметр в который надо изменить" "время, за которое должен произойти переход, 1 секунда равна 1000";

Ну вот вроде и все. Теперь вы знаете как скрывать/показывать объекты и как делать плавные переходы.

0

16

Теперь наш гуи уже имеет взаимодействие с внутренними объектами, меняет цвет, скрывает картинку. Но ведь хотелось бы что бы и этим гуи можно было триггерить что либо на карте в игре... Не так ли? Чтобы вы нажали на него и он что либо триггерил.
Сделать это можно довольно просто, для этого достаточно открыть событие щелчка мыши по элементу (OnAction) и добавить в него следующий текст :

       set "cmd" "activate ; play guisounds_action" ;, где

set "cmd" означает, что гуи дожен передать комманду,
activate - показывает какая команда будет передана,
play guisounds_action - означает что при нажатиии так же будет воспроизведен звук шейдера guisounds_action.

в итоге наш скрипт будет выглядеть так (добавленные строки выделены):

onAction
{

       set "cmd" "activate ; play guisounds_action" ;
       set "texturka::visible" "0";
}

onMouseEnter
{
transition "texturka::matcolor" "0,0.50196081,0.25098041,1" "0.50196081,0.50196081,0.50196081,1" "400";
}

onMouseExit
{
transition "texturka::matcolor" "0.50196081,0.50196081,0.50196081,1" "0,0.50196081,0.25098041,1" "400";
}

Теперь при нажатии на этот гуи на карте, он сможет триггерить привязанные к его статику объекты.

Отредактировано jONNY[ReWIRE] (17-02-2011 17:33:21)

0

17

Теперь давайте сделаем так, чтобы после нажатия на наш значек, после того как он пропадет, он автоматически появлялся снова, через 3 секунды.

Для этого нам понадобится создать таймер. Чтож, так создадим же его!
Создайте WindowDef и в свойтвах во вкладке General замените ему имя на "Timer", так же снимите галочку с "Visible", сделав его невидимым и поставьте галочку на "NoTime", что означает что таймер запустится только когда будет вручную затриггерен из скрипта. Все, подготовка таймера завершена, закройте окно свойств, нажав "ОК".

Теперь нам нужно выделить наш объект "Timer" в окне Navigator и щелкнув по нему правой кнопкой мыши выбрать "Scripts...".
И ввести вот это:

OnTime 3000 // Означает что через 3 секунды после запуска таймера произойдет событие указанное внутри.
{
      set "texturka::visible" "1";
}

Все, таймер готов.

Теперь нужно добавить скрипт, который запустит созданный нами таймер. Добавляем его в скрипт нашего значка, ведь щелкая по нему мы его скрываем, и тут же запускаем таймер, который снова покажет его через 3 секунды.

В итоге скрипт значка будет выглядеть так (добавленные строки выделены):

onAction
{
       set "cmd" "activate ; play guisounds_action" ;
       set "texturka::visible" "0";

       resetTime "Timer" "0";  // resetTime означает, что нужно задать объекту определенное время, "Timer" - указывает какому объекту задают время, "0" - указывается время с которого должен пойти таймер, если например тут заместо нуля ввести 1000, то отсчет пойдет не с нуля, а с 1ой секнды, и промежуток между нажатием и появлением будет не 3, а уже 2 секунды.
}

onMouseEnter
{
transition "texturka::matcolor" "0,0.50196081,0.25098041,1" "0.50196081,0.50196081,0.50196081,1" "400";
}

onMouseExit
{
transition "texturka::matcolor" "0.50196081,0.50196081,0.50196081,1" "0,0.50196081,0.25098041,1" "400";
}

Готово. Теперь после нажатия на значок он будет постоянно появляться через 3 секунды после нажатия.

0

18

Ну вот, наш экспериментальный гуи готов. Он может активировать объекты на карте, издавать звук при нажатии, плавно изменять цвет, и имеет таймер. Но, как вы видите он выглядит черезчур просто, совсем не похож он на те красивенькие гуи, что вы лицезреете в игре.
Но не печальтесь, даже этот гуи можно сделать более - менее смотрибельным и красивым )).

Тут я расскажу как.

Итак наш гуи полностью готов, теперь создайте WindowDef, растяните его по поверхности всего нашего гуи и назовите его например AHL.  Затем перейдите во вкладку Images и назначьте ему текстуру : "gui/addhighlight" (без кавычек конечно же). Задайте его параметру Matcolor светло зеленый цвет. Нажмите ОК, закрывая свойства.

Получите вот это:

0

19

Затем создаете еще 1 WindowDef, так же растягиваете его по всей области гуи, и текстурой ему назначаете вот это "guis/assets/common/outershadow", можете назвать его OS.

Потом снова, точно так же создаете еще 1 WindowDef и растянув по всей площади гуи, назначаете ему текстуру "gui/glow", даете ему имя Glow и выбираете ему темно-темно зеленый цвет и задаете ему прозрачность в 60 %. После этого вам нужно будет отправить его на задний план комбинацией клавиш "Ctrl + [" (жмите до тех пор, пока он не займет место между компонентами Black и Title).

После этого снова создаете WindowDef, растягиваете как и раньше, и задаете текстуру "guis/assets/common/dirt2", цвет не задаете, имя укажите как Dirt.

И наконец создаем последний WindowDef, полностью повторяем все действия, текстурой назначаем "guis/assets/common/dirt3", даем имя Dirt2.

Готово.

0

20

Итак из черного неживого, некрасивого гуи, мы получили более-менее прилично смотрящийся гуи.

Судите сами, что выгдядит лучше...

0

21

Если возникают какие либо вопросы или неясности, пишите в эту тему. Чем смогу - помогу.
Для тех, кто что то не понимает в этом уроке или желает лично в редакторе разобраться со всем вышеизложенным, то вот тут прилагается и этот самый гуи Скачать обучающий гуи

Статью не поленился написать jONNY[ReWire]  :writing:

+1

22

Как раз понадобилось создать свой гуи. Раньше всегда лазил на дум3.ру. Теперь поддержу наш сайт :)

З.Ы. Плюс поставлю.

0

23

RedOctober написал(а):

Как раз понадобилось создать свой гуи.Раньше всегда лазил на дум3.ру. Теперь поддержу наш сайт

Хех... На doom3.ru такого нет )

0


Вы здесь » Форум Мапперов и Doom'еров » Уроки » GUI и все что с ними связано.