| |||||||
† Статьи †Создание собственного GUI, часть втораяВ уроке прошлом мы немного освоили гуи-эдитор. Что нам это даёт? Можно наваять экран с кучей помех и дергающихся надписей. Поставить его на карту. Какая с этого польа, помимо декоративной? Да никакой. Технология GUI-экранов для того и создавалась чтобы маппер мог через мониторы взаимодействать с другими объектами на карте, создавая различные игровые ситуации - например, по нажатии на экран открывались двери, выскакивали монстры, бились лампочки и прочее. В уроке нынешнем мы займемся созданием подобных экранов. По первой части данного мануала создаём гуишник с кнопкой. К кнопке пишем следующий код:
OnAction { set "cmd" "activate" ; } Есстественно, такие события, как OnMouseEnter, OnMouseExit, OnTime и остальные также актуальны. Теперь редактор gui-скриптов можно закрыть, он нам пока не нужен. Запускаем редактор карт. Создаем новую карты и ставим на ней какую-нибудь модель. Цепляем к модели наш гуишник посредством прописывания следующих параметров у модели (пишем в окошке, которое вызывается по кнопке N): value: gui key: путь_к_скрипту (например, guis/Amon/newscript2.gui) value: locked key: 1 Создаём объект target_lock. Параметры объекта следующие: value: locked key: 0 Соединяем через Ctrl+K сначала модель терминала с target_lock, а потом (сняв выделение с предыдущих объектов) target_lock с дверью. Компилируем карту и запускаем её в игре. В игре дверь заблокирована, но после нажатия на кнопку в терминале раблокировывается. Конечно же, можно и наоборот - заблокировать разблокированную дверь. И также никто не мешает повесить другие действия: появление/изчезание монстров, взрывы разных труб, показ скриптового ролика, возпроизведение различных звуков, включение/выключение света наконец! А что если надо сделать, чтобы при каком либо действии на карте (например, при убийстве монстра) менялось что-либо на экране? Например, однажды мне потребовалось создать такую ситуацию - gui-кнопка на терминале должна была отказываться работать, пока игрок не войдёт в определённую комнату. Как я это реализовал? Просто. Для этого есть специальное событие OnTrigger. Используется оно вот так: Создадим экран с кнопкой. Кнопка не будет реагировать на нажатие до активации триггера, но "оживет" после. Для начала создадим gui-экран с нормальной рабочей кнопкой. Присвоим ей любое действие. Потом в свойствах кнопки (открываемых по Alt+Enter) поставим на первой вкладке флажок "No events" (это сделает кнопку неактивной). И потом, создав любой объект (можно за пределами экрана) поставим для него этот код: OnTrigger { set "ИМЯ_КНОПКИ::noevents" "0" ; } Это значит, что при активации триггера кнопка "оживет". Далее открываем редактор карт, создаем терминал с gui-экраном. Создадим триггер (trigger_once), поставим его в нужное место и соединим с терминалом (именно от триггера к терминалу, а не наоборот!). Компилим. В игре gui-кнопка не реагирует на нажатия, но "оживает" при активации триггера. Так, с этим закончили. Теперь расскажу про такой шикарный параметр, как Gui_Parm. Что это? Допустим, тебе надо создать 5 терминалов с одинаковыми экранами, но разными надписями на них. Можно скопировать 5 раз искомый экран, изменить и для каждого надписи. А если надо 10 терминалов? 100? 1000? Долго, трудно и тупо. Для таких случаев есть gui_parm - значение, которое на одном и том же gui-экране может быть различным. Подробнее. Создаем gui-экран, в нем окошко со таким текстом: "gui::gui_parm1" (без кавычек). Далее вставляем на новую карту терминал с только что созданым gui-экраном и в свойствах терминала пропишем следующий ключ:value: gui_parm1 key: нужный_текст А если надо 2 разных надписи? Тогда нужно создать в gui-скрипте еще один объект с текстом, но в качестве текста будет "gui::gui_parm2" (и в свойствах терминала добавим ключ gui_parm2). Все. Также актуальны значения gui_parm3, gui_parm4, gui_parm5 и далее. И также эту фишку можно применять не только для текста, но и для фонового изображения, и для видимости какого-либо объекта, и для ещё много чего. С этим можно поэкспериментировать и самому. На этом всё. Если что непонятно - пиши мне на мыло или в гесту. Ожидается 3-я часть мануала. Пример (описаный gui и карту-пример с ним) можно слить здесь. Автор: | |||||||