ОСНОВЫ ИНТЕРФЕЙСА

» Раздел: Триггеры и объекты
Содержание:

Вступление.

Начнем с того, что я писал статью для себя, и для остальных русскоговорящих. Переводил многие статьи с хайва, там уже разобрано и примеров кучу. Но все равно многое непонятное. Согласитесь, с картинками лучше, и визуально лучше самому разобраться. Разжевывал некоторые непонятные моменты, как это все работает. Для начала просто открыл основные фреймы, потом все дальше, и дальше открывал. Скрывал, смотрел. Если что-то не так переводил, или непонятно, я оставлял без перевода или переводил по-своему. Но тут есть кривой перевод с гугла оставленный без расшифровки, тк кривой перевод/искаженный смысл/или невозможно понять, что хотел сказать автор - не могу просто взять и исправить на свое понимание, если точно не уверен. Могу даже ошибаться, поскольку для меня фреймы что-то новое. Чем больше открывал знании, тем заполнял недостающие и постараюсь возвратится обратно, чтобы исправить ошибки перевода или не точности. Где-то гугл помогал, оказывается, что многие элементы интерфейса используются не только в игре, но и в программировании. Можно какие-то элементы интерфейса посмотреть отсюда.
Знаете, не подумал, что напишу столько, и создам кучу примеров. Просто часто повторяю одни и те же действия, когда создаю фреймы или тестирую с фреймами. Поэтому решил примеры выставить. Когда в голову приходит попробовать что-то с фреймом, то могу скопировать. Ведь собирать fdf-образцы и lua-код с нуля ну прям не благодарное дело, и повторять те же действия. Еще есть недоработанные системы с отслеживанием положения мыши на экране, я их оставил для себя тут. Вдруг появится решение и желание. Невозможно отследить и знать все нюансы сразу. Тут очень много заметок и наработок, когда что-то узнаю, то добавлю сюда или исправлю.

Краткий урок

Что такое frame? англ frame - по нашему это изображение, или рисунок. Но в варкрафте фрейм имеет более обширное понятие. Тут дали больше возможностей в управлении интерфейса: двигать, связывать, изменять размеры, цвет, прозрачность, уровни наслаивания фреймов - фрейм с самым высоким уровнем будет выше, и реакция мыши на него будет работать. Более того получили события реакции на мышь: движение курсора (вход/выход в фрейм), нажатие и отпускание кнопки мыши, реакции на клавиатуру. Тексты тоже являются фреймами.
Существуют так 2 типа фрейма - функциональные Frames, так и SimpleFrames
SimpleFrames - с перевода англ. simple frames - простые, обычные фреймы. Все фреймы состоят из SimpleFrames - простых фреймов, состоящих из простых элементов: texture, string, layer. Они задают текстуры, слой, текст. Texture, string, layer - это даже не фреймы, они не считаются полноценными, чаще являются дочерними какого нибудь родителя. Обращение к ним через нативки frames может привести к фаталу. У simple frame не так много возможностей, но это не значит, что они уступают вторым типам
функциональные frames - ранее называл их обычными, но дабы соответствовать переводу решено изменить на функциональные. Функционала у них больше, чем у simpleframes. эти не используют эти texture, string, layer. Для каждого большого фрейма создаются отдельные фреймы. У функционального frame для задания изображения/фона используется frame-backdrop, для задания подсветки frame-HighLight, для текста frame-TEXT. Короче, simpleframes и frames отличаются fdf-функциями и немного функционалом (хотя функционал немного схож, но у функциональных фреймов богаче функционал). есть мнения что функциональные frames происходят из SimpleFrames пример, просто frames созданы под конкретную задачу, под игровые элементы интерфейса. Но SimpleFrames нет большинства ограничении, а у обычных frames зависимость от игры (во время паузы GAME_UI выключается, и остальные временно отключены), зависимость от экрана 4:3, фреймов-родителей.у обычных frames есть небольшой функционал за счет функциональных фреймов backdrop, highlight, text, и других отдельных типов фреймов, которых может не быть у simpleframes.
Функциональные frame может состоять из нескольких начальных типов frames:
  • backdrop (фон состоит из изображения, и границ: рамки). Все фреймы имеют backdrop. Они все имеют изображение, или хотя бы фон, пример для окна или кнопки с текстом необходимо изображение фона. Еще одно преимущество backdrop с простыми texture это границы рамок. прорисовать картинке рамку - плохая идея. Когда фон растягивается, то картинка тоже, и вместе с ней рамка оч плохо смотрится.
  • HighLight (изображение с альфа-каналом). Обычно работают с кнопками, например при наводке на кнопку срабатывает эффект свечения. Это полупрозрачные текстуры с альфа-каналом, которые накладывают поверх кнопок или других каких-нибудь фреймов.
  • Text (шрифт: размеры, цвет и пр). Если нужно ввести текст, прикрепляют этот фрейм.
Это были самые легкие функциональные frames. Короче, к чему я веду, а к тому, что в варике сложные элементы состоят из простых. Приведу пример ниже.
Сложные функциональные типы frames как button, checkbox, slider, editbox, tooltip и пр - все они могут состоять из легких frames и др элементов, а также иметь собственное поведение и события. Возьмем, пример кнопку (button): кнопка имеет (backdrop: фон с границей, проще говоря рисунок), Text (если кнопка текстовая, то мб иметь текст), HighLight (свечение при наведении на кнопку и пр), Tooltip (всплывающая подсказка при наведении на кнопку курсором, tooltip состоит из еще одного backdrop с Text). Button имеет свое поведение: на нее можно навести курсор мышь, прожать и пр. У каждого фрейма есть свое поведение. Некоторые типы могут быть даже похожими друг на друга, пример button, GlueButton, checkbox - это просто кнопки, но есть незначительные и значительные отличия, об этом расскажу попозже.

Разделение фреймы на группы

В варкрафте стандартный интерфейс поделен на группы фреймов. Группа фреймов привязана к предку/родителю - более старшему фрейму. У них уже заранее созданы группы переменных (OriginframeType), и даны названия ссылка. Короче, есть главный фрэйм (родитель), к которому привязываются дочерние фрэймы (потомки). Можно родителя спрятать, но вместе с ним прячет остальную группу потомков. От дочерних фреймов есть еще младшие фрэймы. От младших возможно существуют другие потомки, если конечно есть у них. Так можно бесконечно создать ветви (кому как угодно).

Вывод

Но к сожалению, функционал редактора очень ограничен, и из этих стандартных фрэймов нельзя достать какую либо информацию (можно, но не из всех можно достать информацию.). Что за юнит у вас выделен/какие абилки, какая там иконка, текст и пр. Да, вы сможете спрятать, удалить и прочее. Но не переиспользовать нынешний интерфейс. Конечно, некоторым умельцам удалось выяснить, какой юнит у вас выделен, или выдрать какую нибудь инфу и пр. Но все это порождает писать костыли.
Некоторые фреймы могут постоянно обновляться. К примеру, нельзя использоваться фрейм атаки. Вы можете получить доступ к значениям атаки, изменить. Однако, это бессмысленное действие. Проще заменить своим фреймом, и выдавать свое. Есть кучу проблем: как понять что ваш юнит выделен, как понять сколько у юнита атаки.
Другой случай, если вы создадите фрэймы с нуля. Тогда будет для самодельных фреймов все легко. Однако, некоторые вещи вам придется дорабатывать самим. К примеру иконка незанятого рабочего: как определить, что у вас рабочий не занят? вам придется самим доработать, в то время в игре это было.


Views: 155

» Лучшие комментарии


Bergi_Bear #1 - 2 weeks ago 6
Голосов: +6 / -0
Спасибо огромное за данный материал в ру комньюнити, надеюсь теперь мы увидим больше хороших карт.
Zgabis #3 - 2 weeks ago 4
Голосов: +4 / -0
Дай я тебя расцелую
Slonick #5 - 4 days ago 4
Голосов: +4 / -0
дай бог здоровья автору