Добавлен , опубликован
Раздел:
Триггеры и объекты
Содержание:

Вступление.

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

Краткий урок

Что такое frame? англ frame - по нашему это изображение, или рисунок. Но в варкрафте фрейм имеет более обширное понятие. Тут дали больше возможностей в управлении интерфейса: двигать, связывать, изменять размеры, цвет, прозрачность, уровни наслаивания фреймов - фрейм с самым высоким уровнем будет выше, и реакция мыши на него будет работать. Более того получили события реакции на мышь: движение курсора (вход/выход в фрейм), нажатие и отпускание кнопки мыши, реакции на клавиатуру. Тексты тоже являются фреймами.
Существуют так 2 типа фрейма - функциональные Frames (фреймы главного меню), так и SimpleFrames (игровые фреймы)
Все фреймы игры состоят из SimpleFrames, а когда вызываете "главное меню", у вас отображаются в меню функциональные фреймы.
SimpleFrames - с перевода англ. это "простые фреймы". состоят как правило из простых элементов: texture, string, layer. Они задают текстуры, слой, текст. И они не используют сложные структуры как у фреймов главного меню. Texture, string, layer - это даже не фреймы, они не считаются полноценными, чаще являются дочерними какого нибудь родителя simple-parent. Обращение к ним через нативки frames может привести к фаталу. У simple frame не так много возможностей по функционалу, но это не значит, что они уступают вторым типам. Все-таки многие кнопки игры - simplebuttons, полосы хп - simple status, а изображение и текст можно задать через родителя simpleframe
функциональные 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 - это просто кнопки, но есть незначительные и значительные отличия, об этом расскажу попозже.

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

В варкрафте стандартный интерфейс поделен на группы фреймов. На самом деле это больше относится к функциональным фреймам (фреймам главного меню). Можно заглянуть в главное меню, и там можете заметить как меняется содержимое меню. По сути, там просто один и тот же фон. Но меняются контейнеры, иногда называют панелями.
Преимущества и плюсы группы:
  • Помещение в слои родителя. Группа фреймов привязана к предку/родителю - более старшему фрейму. При создании фрейм помешается в слой родителя - это всегда так у функциональных фреймов. Когда создаются несколько фреймов они все помещаются в слой родителя. Слой определяет какая картинка будет выше/ниже. А вот потомки внутри слоя могут имеют уровни, которые определяют как они будут накладываться друг на друга. Слой родителя всегда выше самого родителя: когда создается фрейм-потомок, то он всегда выше родителя. почему-то никак не опустить ниже родителя функциональных фреймов.
  • древовидные ветви. Можно создавать древовидные ветки фреймов. Родитель => дочерние фреймы. От дочерних фреймов есть еще младшие фрэймы. От младших возможно существуют другие потомки, если конечно есть у них. Так можно бесконечно создать ветви (кому как угодно).
  • наследование параметров Короче, есть главный фрэйм (родитель), к которому привязываются дочерние фрэймы (потомки). У функциональных фреймов существует 2 зависимых параметра от родителя - видимость и отключение работы фрейма. Это пока, что два действия, которые могут менять видимость и работу группы фреймов. Отключаем контейнер-родителя, отключаются потомки. Включаем родителя - потомки работают. Прячем родителя - группа потомков исчезает. Показываем контейнер - группа видима снова.
Это все плюсы группы и преимущества группа. Работает правда только у функциональных фреймов. У Simple frames это не работает.
Отмечу, что группу "родитель-потомок" можно создавать двумя способами:
триггер/код. в аргументе функции создании фрейма всегда указывают родителя. чтобы помешать фрейм в слой и привязывать к родителю. мне всегда удобно было строить конструкции чисто кодом, а не импортом. Люблю напрямую обращаться. Насчет simpleframe, он создается, однако, все удобные преимущества группы не работают в simpleframe. simpleframe работает только с импортом.
импорт. вы можете создать шаблон в fdf-file. Обычно в варкрафте есть кучу шаблонов, и дабы не прописывать одни и те же характеристики и настройки, можно просто прописать название шаблона в функции создания. в fdf-file прописывают специальный скриптом, в виде блоков. внутри главного тела можно
пример скрипта fdf-file
//всегда конструкция начинается с Frame
//далее в аргументах прописывают тип и название
//аргументы не разделяют запятыми
Frame "type" "name" {
	//тело фрейма
}
образец
//BACKDROP - тип фрейма (фон)
//GoldBackdrop - название фрейма
Frame "BACKDROP" "GoldBackdrop" {
	//тело фрейма
}
внутри шаблона можно запихать группу фреймов. Все что нужно - это внутри тела фрейма добавить другие фреймы. Они и будут являться потомками этого фрейма. Указываем шаблон в функции создании фрейма. Когда в игре создается фрейм, он может создаться не один, а несколько (если указаны). Если такого родителя спрятать/показать, включать/отключать, то действия влияют и на потомков похожим образом. на simpleframe это будет также работать.
пример
Frame "BACKDROP" "GoldBackdrop" { //это главный фрейм
	//параметры фрейма BACKDROP, я их стер

	//ниже можно указать потомка
    Frame "TEXT" "GoldText" { //потомок 
		//параметры GoldText
    }
}
мы уже изучили каким образом можно создавать.
с simpleframe может потребоваться возня с импортом. часто там прописать можно texture, string. они всегда внутри прописываются. а еще есть layer (слой), который определяет как должны наслаиваться фреймы друг на друга (выше/ниже). короче, с импортом разберемся в след уроке

Вывод

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

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
10
32
2 года назад
10
Спасибо огромное за данный материал в ру комньюнити, надеюсь теперь мы увидим больше хороших карт.
6
6
2 года назад
6
Дай я тебя расцелую
7
10
2 года назад
7
дай бог здоровья автору
1
17
2 года назад
1
Спасибо за разъяснения! Скажите, а Фреймы на варкрафте 1.26 по такому же принципу построены?
1
27
2 года назад
1
Спасибо за разъяснения! Скажите, а Фреймы на варкрафте 1.26 по такому же принципу построены?
вроде бы да)) там все также. Именные названия фреймы сохранены, некоторые нативки похожи, Unryze завез список нативных фреймов, те что в рефе, даже больше. Но есть и отличия, об этом я не могу знать. Я только в рефе, у меня не хочет пахать вар 1.26. файл регистр не помогает. мне лень качать варкрафт 1.26. разбираться с установкой итд
Чтобы оставить комментарий, пожалуйста, войдите на сайт.