источник - тут можно посмотреть примеры с картами
Backdrops как тип управляют визуальными текстурами группы Frame: это границы (borders), фон или изображение текстуры (backgrounds). Большинство фреймов, представляющих собой нечто большее, чем простой текст, имеют фоны (дочерних фреймов с функционалом типа backdrop), управляющие отображаемыми текстурами.
Backdrop отличается от обычных текстур, тут в fdf-file можно задать разные параметры. Можно например сверху границы добавить основной текстуре. Помню опыт работы с simple frame, там нет таких функции. А simple frame плохо взаимодействуют с функциональными фреймами. Поэтому решил чисто работать c texture (это тип simple frame). У них нельзя было добавить границы. Поэтому решено было нарисовать их. Работал тогда с подсказками, и мне нужен был фон. Но просто нарисовать границы texture - такое не прокатит. Фон подсказки должен был растягиваться в зависимости от объема текста. Понимаете к чему веду? texture проигрывает backdrop. Текстура ужасно растягивается. Поэтому для simole frame я немного схитрил. Об этом рассмотрим позже
BACKDROP может использовать все типы изображений, поддерживаемые Warcraft 3: BLP, TGA, DDS. DDS можно использовать только в Warcraft 3 V1.32. Для DDS тип сжатия имеет значение, в моем тесте работал только DXT1 / DXT5 (сгенерированный с помощью GIMP).
BACKDROP FDF
функции Control в fdf
кратко: Может быть непонятно для чего нужны эти Control. Я объясню для чего это нужно. У фрейма может быть несколько состоянии. Вы должны понять, что Control тут в fdf заменяют нам события в триггерах.
Эти дочерние элементы / подфреймы фона получают более сильную связь, объявляя их как Control. Такие фоны управления имитируют main frame по размеру и положению (если не указано иное). Два основных элемента управления Backdrops - это
ControlBackdrop
- ControlBackdrop <name 1>,
ControlDisabledBackdrop
- ControlDisabledBackdrop <name 2>,
Для кнопок эти указанные фреймы в ControlBackdrop и ControlDisabledBackdrop являются изображением. Для TextButton это обычный фон, тут еще и цвет текст кнопки меняется. Для разных видов фреймов свои необычное изображение, пример CheckBox изображением backdrop является рамка.
Пример, я выключил включенный фрейм
call BlzFrameSetEnable(BlzGetFrameByName("UpperButtonBarMenuButton",0), false)
такого еще можно добиться, если зайти в меню. И игра паузится:
Пример, я выключил включенный фрейм
call BlzFrameSetEnable(BlzGetFrameByName("UpperButtonBarMenuButton",0), false)
такого еще можно добиться, если зайти в меню. И игра паузится:
это как и с импортом иконок, вспомните, что существуют BTN для нормального состояния картинки, DISBTN - для отключенного. также и с фреймами
ReplaceableTextures\CommandButtons\BTN<name icon>.blp
ReplaceableTextures\CommandButtonsDisabled\DISBTN<name icon>.blp
К чему я это говорю, вспоминая про импорт? дело в том, что когда вы будете создавать триггерно кнопку, не забудьте указать и ее обратную сторону - Disabled. Иначе будет так во время паузы
ReplaceableTextures\CommandButtons\BTN<name icon>.blp
ReplaceableTextures\CommandButtonsDisabled\DISBTN<name icon>.blp
К чему я это говорю, вспоминая про импорт? дело в том, что когда вы будете создавать триггерно кнопку, не забудьте указать и ее обратную сторону - Disabled. Иначе будет так во время паузы
Только у менюшек нет Disable, там где паузы нельзя поставить, ставится только игровому интерфейсу
Примечание: для самодельных фреймов делать DisabledTexture необязательно, тк в игре интерфейс близзард автоматически сам затемняется, это встроено внутри игры, и с этим ничего не поделаешь. А с самодельными фреймами это не предусмотрено, если вся игра паузится, иконки ваших фреймов остаются активными, а не затемненными, Можете не боятся, что иконка вашего фрейма резко вдруг позеленеет. так что это реакция фрейма почти бесполезна. разве, что сделать что-то с существующими вариковскими
Некоторые типы FrameTypes имеют больше дополнительных элементов управления. В некоторых типах фреймов, вроде кнопки (button) добавляются дополнительные функции Control.
Примечание: для самодельных фреймов делать DisabledTexture необязательно, тк в игре интерфейс близзард автоматически сам затемняется, это встроено внутри игры, и с этим ничего не поделаешь. А с самодельными фреймами это не предусмотрено, если вся игра паузится, иконки ваших фреймов остаются активными, а не затемненными, Можете не боятся, что иконка вашего фрейма резко вдруг позеленеет. так что это реакция фрейма почти бесполезна. разве, что сделать что-то с существующими вариковскими
Некоторые типы FrameTypes имеют больше дополнительных элементов управления. В некоторых типах фреймов, вроде кнопки (button) добавляются дополнительные функции Control.
ControlPushedBackdrop
- ControlPushedBackdrop <name 4> - реакция фрейма, когда нажимают на кнопку. Эффект наблюдается в промежутке между нажатием и отпусканием мыши. То есть можно зажать кнопку, не отпуская ее, тогда вы заметите эффект. То есть временно показывают фрейм в ControlPushedBackdrop. В кнопках такое лучше не использовать, при клике мыши она заменяет фон в ControlBackdrop на ControlPushrdBackdrop на несколько секунд, и потом возвращает.
ControlDisabledPushedBackdrop
Можете разные варианты эффектов при нажатии делать:
Так понимаю, это должен быть эффект подсветки, фон подсвечивается.
- ControlDisabledPushedBackdrop <name 5> - реакция фрейма, когда нажимают на кнопку. В режиме паузы у вас может затемнится изображение фрейма, указанного в ControlPushedBackdrop. Такое очень сложно повторить, но я попробовал в тесте. Можно событиями триггера ловить мышь, и выключать триггер. Вы сможете заметить затемненное изображение. У некоторых фреймов изображение в ControlDisabledBackdrop и ControlDisabledPushedBackdrop одинаково
Можете разные варианты эффектов при нажатии делать:
Так понимаю, это должен быть эффект подсветки, фон подсвечивается.
UI\Widgets\Glues\GlueScreen-Checkbox-BackgroundPressed.blp",
- эффект продавливания при клике (многие изображения имеют down). Когда вы нажимали, вы могли замечать, как края изображения картинки сплющивалось. Вы можете похожий эффект сделать и тут. Некоторые изображения могут незаметно отличатся от down, down края немного подрезаны или картинка сжата
"UI\Widgets\BattleNet\bnet-mainmenu-options-down.blp",
"UI\Widgets\BattleNet\bnet-refresh-up.blp",
"UI\Widgets\BattleNet\bnet-refresh-down.blp",
"UI\Widgets\BattleNet\bnet-refresh-disabled.blp",
"UI\Widgets\BattleNet\bnet-refresh-down.blp",
"UI\Widgets\BattleNet\bnet-refresh-disabled.blp",
ControlFocusHighlight
- ControlFocusHighlight <name 6> - здесь уже используют другой тип фрейма - Highlight, отвечающая за подсветку. Этот Control - результат реакции нажатия на кнопку меню или не нажатия. Когда вы нажимаете на кнопку, она у вас подсвечивается:
эффект снимается, если я нажму не по кнопке. А например, по пустому месту экрана. Фокус снимается также нативкой BlzFrameSetFocus(frame, flag) :
Этот фокус применятся в индикаторах героев.
здесь используется текстура HighLight "UI\Widgets\Glues\GlueScreen-CampaignButton-KeyboardHighlight.blp"
Таким фокусом можно пользоваться при вызове контекстного меню, изображения и пр. На относительном расстоянии их расставить. это применимо к HighLight. Но HighLight использует изображения,которые кладут поверх button, они ничем не отличаются от тех же backdrop
ControlMouseOverHighlight
- ControlMouseOverHighlight <name 7> - Highlight подсвечивается, когда вы наводите курсор мыши на кнопку. Обычно изображение Highlight прозрачна, и имеет альфа-канал. Она подсвечивает кнопку.
Если вы работаете с Button, то можете столкнуться с проблемами из-за неправильной работы:
код
//когда наводят мышью на кнопку, она подсвечивается
ControlMouseOverHighlight "MyButtonMouseOverHighlightTemplate",
Frame "HIGHLIGHT" "MyButtonMouseOverHighlightTemplate" {
DecorateFileNames,
HighlightType "FILETEXTURE",
HighlightAlphaFile "EscMenuButtonMouseOverHighlight",
HighlightAlphaMode "ADD",
}
Пример с EscMenuButtonMouseOverHighlight=UI\Widgets\EscMenu\Human\human-options-button-highlight.blp
ButtonText
- ButtonText <name 8> -это прикрепляют фрейм TEXT обычно к кнопке, и задает настройки. Это тоже своего рода реакция на различные события. В fdf-фрейме TEXT можно задать подсветку текста в нормальном/выключенном и выделенном режиме. В норм состоянии кнопка белая, в выключенном серая, а когда наводим на кнопку - текст меняет цвет на ярко-желто-золотой. Она подсвечивает кнопку. Если бы не было этого ButtonText вам бы пришлось бы извращаться с TEXT. фрейм типа TEXT имеет не только текст, но и невидимую рамку, ей можно задавать размеры высоты и ширины. Если текст создать перед кнопкой, она не даст кликнуть.
fdf код
ButtonText "ScriptDialogButtonText",
Frame "TEXT" "ScriptDialogButtonText" INHERITS "EscMenuButtonTextTemplate" {
Text "",
}
ControlStyle
ControlStyle <= запускает функции Control
Для вышеперечисленных Control нужно прописать ControlStyle, иначе ничего работать не будет.
Для вышеперечисленных Control нужно прописать ControlStyle, иначе ничего работать не будет.
ControlStyle "AUTOTRACK|HIGHLIGHTONFOCUS|HIGHLIGHTONMOUSEOVER",
AUTOTRACK - запускает фреймы , заданные в ControlPushedBackdrop и ControlDisabledPushedBackdrop.
HIGHLIGHTONMOUSEOVER - запускает фрейм, заданный в ControlMouseOverHighlight
HIGHLIGHTONFOCUS - запускает фрейм, заданный в ControlFocusHighlight
Эти три параметра ControlStyle отделены между собой | Можете прописать три, или два:
ControlStyle "AUTOTRACK|HIGHLIGHTONMOUSEOVER",
ControlStyle "AUTOTRACK|HIGHLIGHTONMOUSEOVER",
А может один:
ControlStyle "HIGHLIGHTONMOUSEOVER",
Вы можете не прописывать эти Control, и тогда на ваш не будет идти никакая реакция. Если вы выключите фрейм кодом BlzFrameSetEnable(frame, false) у вас фрейм просто выключится.
Рассмотрим полный код fdf-файла:
код
IncludeFile "UI\FrameDef\UI\EscMenuTemplates.fdf", //подключаем файл
Frame "GLUETEXTBUTTON" "EscMenuButtonTemplate" {
Width 0.228,
Height 0.035,
ControlStyle "AUTOTRACK|HIGHLIGHTONMOUSEOVER",
ButtonPushedTextOffset 0.002f -0.002f,
ControlBackdrop "ButtonBackdropTemplate",
Frame "BACKDROP" "ButtonBackdropTemplate" INHERITS "EscMenuButtonBackdropTemplate" {
//здесь должны быть прописаны настройки backdrop ButtonBackdropTemplate
}
ControlPushedBackdrop "ButtonPushedBackdropTemplate",
Frame "BACKDROP" "ButtonPushedBackdropTemplate" INHERITS "EscMenuButtonPushedBackdropTemplate" {
//здесь должны быть прописаны настройки backdrop ButtonPushedBackdropTemplate
}
ControlDisabledBackdrop "ButtonDisabledBackdropTemplate",
Frame "BACKDROP" "ButtonDisabledBackdropTemplate" INHERITS "EscMenuButtonDisabledBackdropTemplate" {
//здесь должны быть прописаны настройки backdrop ButtonDisabledBackdropTemplate
}
ControlDisabledPushedBackdrop "ButtonDisabledPushedBackdropTemplate",
Frame "BACKDROP" "ButtonDisabledPushedBackdropTemplate" INHERITS "EscMenuButtonDisabledPushedBackdropTemplate" {
//здесь должны быть прописаны настройки backdrop ButtonDisabledPushedBackdropTemplate
}
ControlMouseOverHighlight "ButtonMouseOverHighlightTemplate",
Frame "HIGHLIGHT" "ButtonMouseOverHighlightTemplate" INHERITS "EscMenuButtonMouseOverHighlightTemplate" {
//здесь должны быть прописаны настройки HighLight ButtonMouseOverHighlightTemplate
}
}
функции backdrop fdf
Backdrops как типы не могут иметь frameevents (то есть им нельзя задать фреймовых событий).
Если вам будет непонятно назначение некоторых строк. Я постараюсь разъяснить. Все fdf-files находятся тут- по ним можно взять шаблоны и расшифровать данные
Если вам будет непонятно назначение некоторых строк. Я постараюсь разъяснить. Все fdf-files находятся тут- по ним можно взять шаблоны и расшифровать данные
Width и Height
Размеры фрейма. Понятное дело, изображение всегда в прямоугольной форме. Width - ширина, Height - высота. Обычно он задается тем фреймам, у которых будет изображение.
Изображение можно подкорректировать триггерной нативкой BlzFrameSetSize(frame, width, height). Без размеров у вас не будет показана изображение.
Изображение можно подкорректировать триггерной нативкой BlzFrameSetSize(frame, width, height). Без размеров у вас не будет показана изображение.
Width real,
Height real,
Пример:
Width 0.362,
Height 0.037,
Еще есть невидимые фреймы. У них не указано никакое изображение, и им это не нужно. Размер важен, если нужно связать родителя и потомков в одну группу с помощью FRAMEPOINTS. FRAMEPOINTS - точки прямоугольника-фрейма. Если вы перемещаете родителя. То вместе с ним и потомки двигаются.
Однако, размеры мб важны и для кое-чего другого. Пример, кнопка тоже имеет размеры, ей нужны не только для задания размеров иконки, но и для событии. Примеры нажатие/отпускание, ввод/выход курсора мыши и многое другое. Реакция событии важно чтобы курсор лежат внутри кнопки, клик происходил внутри кнопки и пр.
Для того чтобы триггерно изменять размеры фрейма, нужно в fdf файликах тоже задать размеры width height. Иначе, вы не сможете задать размеры в триггерах. Когда тестировал кнопки, часто наблюдал, что если у вас не заданы размеры, то фрейм невидим, тк он фрейм не имеет изначальных размеров Но так бывает не всегда.
Для того чтобы триггерно изменять размеры фрейма, нужно в fdf файликах тоже задать размеры width height. Иначе, вы не сможете задать размеры в триггерах. Когда тестировал кнопки, часто наблюдал, что если у вас не заданы размеры, то фрейм невидим, тк он фрейм не имеет изначальных размеров Но так бывает не всегда.
Даже для того, чтобы триггерно переместить фрейм в нужную часть экрана, у него должен быть хотя бы размер, тк используем framepoint. framepoints сильно зависят от прямоугольных размеров.
Пример Sprite
Пример Sprite
Frame "SPRITE" "MySprite" {
//размеры спрайту задал от балды, тк модели mdx размер не изменишь. Но он нужен, чтобы двигать фрейм
Width 0.362,
Height 0.037,
BackgroundArt "UI\Minimap\Minimap-Waypoint.mdl",
}
<= в данном случае размеры спрайту указывать не нужно было
Если размер не указан, то фрейм-прямоугольник принимает фрейм-точку framepoint_center, конечно, с такими параметрами не увидишь изображение, фрейм становится невидимым. Но можно привязать к этой точке потомков или других фреймов. они будут двигаться за этой точкой. В таком случае, вы не сможете использовать остальные framepoints, кроме одной - framepoint_center. Вы можете двигать центр фрейма, а за ним двигаются связанные фреймы. Это так работает. Однако так не всегда может работать, в зависимости от фреймов, варкрафт это очень странный
Примечание: несмотря на то, что в некоторых fdf-файлах указаны размеры, некоторые фреймы до сих пор не могут отобразиться. Тогда нужно повторно в триггерах задать размеры.
У backdrop к примеру остаются границы-рамки см. рис (границы могут остаться из-за слишком маленьких размеров или при нуле, тогда вам придется убрать границы в fdf):
Чтобы такого не было, нужно в триггерах после создания задать размер:
BlzFrameSetSize(fh, w, h)
Или убрать шаблоны, с которых они сделаны. У фреймов-шаблонов backdrop могут быть указаны границы. Часто фреймы копируют с шаблонов, поэтому мб в триггерах не стоит указывать эти границы в шаблоне, тогда вас и не будут мучать эти границы
BlzFrameSetSize(fh, w, h)
Или убрать шаблоны, с которых они сделаны. У фреймов-шаблонов backdrop могут быть указаны границы. Часто фреймы копируют с шаблонов, поэтому мб в триггерах не стоит указывать эти границы в шаблоне, тогда вас и не будут мучать эти границы
DecorateFileNames
Этот флаг подключает поиск имен.
В этом фрейме все FdfActions, запрашивающие FilePaths, будут использовать вместо них variableNames, которые берутся из StringList или некоторого Txt-файла, такого как GameInterface.
DecorateFileNames,
Поиск имен файлов в некоторой таблице строк (например, в игровом интерфейсе)
Примечание переводчика: сначала мне тоже был непонятна эта функция. Позже я разгадал ее назначение. Короче, некоторым фреймам можно задать файл
в виде полного пути
в виде полного пути
BackdropBackground "UI\Widgets\Glues\GlueScreen-Button1-SmallBorder.blp",
здесь не нужно прописывать DecorateFileNames. Посмотрите в fdf-files и проверьте сами.
или в виде переменной
DecorateFileNames,
BackdropBackground "EscMenuEditBoxBackground",
Без DecorateFileNames будет вот так:
а все потому что игра не стала искать переменную
DecorateFileNames применима не только к BackdropBackground, но и к другим функциям и даже типам фреймов. Короче, используется для всех фреймов. Данные можно посмотреть в ui/war3skins.txt или в электронных таблицах
EscMenuEditBoxBackground=UI\Widgets\EscMenu\Human\editbox-background.blp
Примечание:
в некоторых типах фреймов может не работать из-за этого флага. К примеру, если указать путь и файл, и одновременно оставить включенным флаг, то при попытке показать в игре у вас будет все изображение зеленым. пп: Из-за этого флага я не мог понять почему не отображается импортированное изображение
в некоторых типах фреймов может не работать из-за этого флага. К примеру, если указать путь и файл, и одновременно оставить включенным флаг, то при попытке показать в игре у вас будет все изображение зеленым. пп: Из-за этого флага я не мог понять почему не отображается импортированное изображение
Примеры:
здесь используем строковую переменную или проще название
здесь используем строковую переменную или проще название
Frame "HIGHLIGHT" "CommandButtonActiveHighlight" {
DecorateFileNames,
HighlightType "FILETEXTURE",
HighlightAlphaFile "CommandButtonActiveHighlight",
HighlightAlphaMode "ADD",
}
здесь не нужно использовать флаг DecorateFileNames, иначе у вас не отобразиться.
Frame "HIGHLIGHT" "CommandButtonNoActiveHighlight" {
HighlightType "FILETEXTURE",
HighlightAlphaFile "ReplaceableTextures\CommandButtons\Nonactivebutton.blp",
HighlightAlphaMode "ADD",
}
BackdropTileBackground
Короче, это флаг включает режим TileMode (мозаичный режим). Если в фрейме указана эта строчка, значит режим включен. В этом режиме может заполняет фрейм плитками текстуры, если конечно указан размер. Без background файл растягивается.
При использовании этой функции также следует установить размер плиток BackdropBackgroundSize.
Можно использовать
BlzFrameSetTexture (frame, file, 1, blend).
Можно использовать
BlzFrameSetTexture (frame, file, 1, blend).
BackdropTileBackground работает вместе с BackdropBackgroundSize
BackdropBackgroundSize
BackdropBackground
BackdropBackgroundInsets
BackdropCornerFlags
Эта функция fdf выбирает какие границы backdrop подключить к background.
В аргументы указывают границы (edgefile). Порядок в аргументах не имеет значения:
T [1] - Top верхняя граница
L [2] - Left левая граница
B [4] - Bottom нижняя граница
R [8] - Right правая граница
BL [16] - нижний левый угол (BottomLeft)
BR [32] - нижний правый угол (BottomRight)
UL [64] - верхний левый угол (почему то TL - TopLeft не работает)
UR [128] - верхний правый угол (почему то TR - TopRight не работает)
T [1] - Top верхняя граница
L [2] - Left левая граница
B [4] - Bottom нижняя граница
R [8] - Right правая граница
BL [16] - нижний левый угол (BottomLeft)
BR [32] - нижний правый угол (BottomRight)
UL [64] - верхний левый угол (почему то TL - TopLeft не работает)
UR [128] - верхний правый угол (почему то TR - TopRight не работает)
Примечание: Чтобы показать только верхний и нижний границу достаточно указать "T|B" а для триггерных функции указать число 5 (1+4)
BackdropEdgeFile
Файл границы, эта текстура имеет границу в виде фрагментов рядом друг с другом (игровой интерфейс). Вам не нужны одиночные, если у вас есть этот.
Некоторые frame имеют готовые названия в виде переменных, пример:
BackdropEdgeFile "MultiboardBorder",
что это за файлы можно найти в файлике:
ui/war3skins.txt
получается, что:
MultiboardBorder=UI\Widgets\EscMenu\Human\editbox-border.blp
Некоторые frame имеют готовые названия в виде переменных, пример:
BackdropEdgeFile "MultiboardBorder",
что это за файлы можно найти в файлике:
ui/war3skins.txt
получается, что:
MultiboardBorder=UI\Widgets\EscMenu\Human\editbox-border.blp
другой пример, можете сразу писать путь:
BackdropEdgeFile "UI\Widgets\ToolTips\Human\human-tooltip-border.blp",
BackdropEdgeFile "UI\Widgets\ToolTips\Human\human-tooltip-border.blp",
BackdropLeftFile (одиночная левая граница)
Устанавливаем текстуру для левой части границ
Пример:
BackdropLeftFile "UI\Widgets\ButtonLeft.blp",
Пример:
BackdropLeftFile "UI\Widgets\ButtonLeft.blp",
BackdropCornerFile (одиночная граница угла)
Устанавливает текстуру для уголков границы
Пример:
BackdropCornerFile "UI\Widgets\ButtonCorners.blp",
Пример:
BackdropCornerFile "UI\Widgets\ButtonCorners.blp",
BackdropTopFile (одиночная верхняя граница)
Устанавливаем текстуру для верхней части границы
Пример:
BackdropTopFile "UI\Widgets\ButtonTop.blp"
Пример:
BackdropTopFile "UI\Widgets\ButtonTop.blp"
BackdropRightFile (одиночная правая граница)
Устанавливаем текстуру для правой части границы
Пример:
BackdropRightFile "UI\Widgets\ButtonRight.blp",
Пример:
BackdropRightFile "UI\Widgets\ButtonRight.blp",
BackdropBottomFile (одиночная нижняя граница)
станавливает текстуру для нижней части границы
Пример:
BackdropBottomFile "UI\Widgets\ButtonBottom.blp"
Пример:
BackdropBottomFile "UI\Widgets\ButtonBottom.blp"
BackdropBlendAll
Позволяет видеть объекты под фреймом.
EscMenuPopupMenuArrow=UI\Widgets\Glues\GlueScreen-Pulldown-Arrow.blp
"UI\Widgets\Glues\GlueScreen-Pulldown-Arrow.blp",
"UI\Widgets\Glues\GlueScreen-Pulldown-Arrow.blp",
UI\Widgets\Console\Human\CommandButton\human-button-lvls-overlay.blp
Короче, посмотрите на картинку. Тут вы видите фрейм с одним и тем же изображением. Текстура изначально имеет заданный альфа-канал по краям.
Короче, посмотрите на картинку. Тут вы видите фрейм с одним и тем же изображением. Текстура изначально имеет заданный альфа-канал по краям.
Справа BackdropBlendAll включен. И поэтому мы видим объекты позади в тех местах.
Напрямую, это действие не делает фрейм прозрачным. Чтобы сделать прозрачным, надо изменить альфа-канал у текстуры в фотошопе или любом другом графическом редакторе.
BackdropHalfSides
No idea
При изменении текстур с помощью кода большая часть этого материала становится неактуальной, и фон может быть пустым, за исключением BackdropBackgroundSize, если нужно заполнить плитку. С помощью этого нативного кода можно изменить текстуру по коду.
native BlzFrameSetTexture takes framehandle backdrop, string texFile, integer flag, boolean blend returns nothing
- texFile - который необходимо указать для использования.
- flag = 0 или 1. 0 - для растянутого режима; 1 - для режима плитки.
- blend - имеет какое-то отношение к прозрачности. (false) выглядит странно, если в текстуре используется прозрачность
Можно создавать BACKDROPS без FDF
кратко: как создать backdrop кодом, не используя импорт?
Для создания просто значков на экране даже не нужен fdf, можно создать BACKDROP, используя BlzCreateFrameByType, затем установить текстуру, положение и размер этого BACKDROP, и у вас будет видимое изображение на экране. Такой BACKDROP не имеет ни мозаичного мода, ни дополнительного файла / границы.
Пример создания фона с BlzCreateFrameByType
Для создания просто значков на экране даже не нужен fdf, можно создать BACKDROP, используя BlzCreateFrameByType, затем установить текстуру, положение и размер этого BACKDROP, и у вас будет видимое изображение на экране. Такой BACKDROP не имеет ни мозаичного мода, ни дополнительного файла / границы.
Пример создания фона с BlzCreateFrameByType
local blademaster = BlzCreateFrameByType("BACKDROP", "Blademaster", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
BlzFrameSetSize(blademaster, 0.04, 0.04)
BlzFrameSetAbsPoint(blademaster, FRAMEPOINT_CENTER, 0.4, 0.3)
BlzFrameSetTexture(blademaster, "ReplaceableTextures\\CommandButtons\\BTNHeroBlademaster",0, true)
Пример создания backdrop с FDF
кратко: Здесь создаем backdrop кодом, подключая импорт. Здесь вам придется мучиться с импортом, ведь для создания/изменения фрейма, вам нужно будет заново заменять импорт.
очень хороший пример представлен здесь <= карту скачать для примера
Можно создать собственный файл fdf. Назовем его “MyBackdrop.fdf”. Этот файл мы позже импортируем в карту. В нем пропишем вот такой код (тут можно вызвать два фрейма: либо MyBackdropTile или MyBackdrop):
очень хороший пример представлен здесь <= карту скачать для примера
Можно создать собственный файл fdf. Назовем его “MyBackdrop.fdf”. Этот файл мы позже импортируем в карту. В нем пропишем вот такой код (тут можно вызвать два фрейма: либо MyBackdropTile или MyBackdrop):
fdf-код
Frame "BACKDROP" "MyBackdropTile" {
//DecorateFileNames,
BackdropTileBackground, //Fills the space with the background texture
BackdropBackground "ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundSize 0.02, //in tile mode, size of each tile
BackdropBackgroundInsets 0.005 0.005 0.005 0.005,
BackdropEdgeFile "UI\Widgets\ToolTips\Human\human-tooltip-border.blp",
}
Frame "BACKDROP" "MyBackdrop" {
BackdropBackground "ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005 0.005 0.005 0.005,
BackdropEdgeFile "UI\Widgets\ToolTips\Human\human-tooltip-border.blp",
}
позднее нам нужно создать файл toc, который можно вызвать триггером. Назовем его “MyBackdrop.toc”, его тоже импортируем в карту. Toc подключаем файл “MyBackdrop.fdf”. В нем запишем код вызова:
war3mapimported/MyBackdrop.fdf
далее jass-кодом можно создать backdrop с нужными настройками из MyBackdrop.fdf
код
function LoadToc takes string s returns nothing
if BlzLoadTOCFile(s) then
call BJDebugMsg("Loaded: "+s)
else
call BJDebugMsg("Failed to Load: "+s)
endif
endfunction
function CreateBackdrops takes nothing returns nothing
//Create the big face
local framehandle fh = BlzCreateFrame("MyBackdrop", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
call BlzFrameSetSize(fh, 0.1, 0.1)
call BlzFrameSetAbsPoint(fh, FRAMEPOINT_CENTER, 0.4, 0.3)
//Create the tile faces
set fh = BlzCreateFrame("MyBackdropTile", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
call BlzFrameSetSize(fh, 0.1, 0.1)
call BlzFrameSetAbsPoint(fh, FRAMEPOINT_CENTER, 0.2, 0.3)
endfunction
//===========================================================================
function InitTrig_Backdrop takes nothing returns nothing
set gg_trg_Backdrop = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Backdrop, 1.00 )
call TriggerAddAction( gg_trg_Backdrop, function CreateBackdrops )
call LoadToc("war3mapimported\\mybackdrop.toc") //Loads the custom toc file
endfunction
Также можно создать Box BackDrop, некоторые из них сделаны Blizzard. Их можно было использовать без какого-либо специального toc. Некоторые ОБРАЗЫ могут не подходить для некоторых размеров. Вот названия этих фреймов:
"EscMenuBackdrop"
"QuestButtonBaseTemplate"
"ScoreScreenButtonBackdropTemplate"
"QuestButtonDisabledBackdropTemplate"
"QuestButtonPushedBackdropTemplate"
"EscMenuBackdrop"
"QuestButtonBaseTemplate"
"ScoreScreenButtonBackdropTemplate"
"QuestButtonDisabledBackdropTemplate"
"QuestButtonPushedBackdropTemplate"
давайте-ка попробуем вызвать эти backdrops в lua-коде, и посмотреть на шаблоны:
код
do
local real = MarkGameStarted
function MarkGameStarted()
real()
local frame = BlzCreateFrame("EscMenuBackdrop", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.1, 0.3)
BlzFrameSetSize(frame, 0.08, 0.08)
frame = BlzCreateFrame("QuestButtonBaseTemplate", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.2, 0.3)
BlzFrameSetSize(frame, 0.08, 0.08)
frame = BlzCreateFrame("ScoreScreenButtonBackdropTemplate", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.3, 0.3)
BlzFrameSetSize(frame, 0.08, 0.08)
frame = BlzCreateFrame("QuestButtonDisabledBackdropTemplate", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.4, 0.3)
BlzFrameSetSize(frame, 0.08, 0.08)
frame = BlzCreateFrame("QuestButtonPushedBackdropTemplate", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.5, 0.3)
BlzFrameSetSize(frame, 0.08, 0.08)
end
end
вот что получилось по коду:
Если вы хотите изменить размер границ (рамок), тогда вам нужно обработать BACKDROP в fdf, чтобы сделать границу меньше или больше и применить некоторые другие настройки.
Ред. MpW