Добавлен , опубликован

Основы Интерфейса

Содержание:
источник - тут можно посмотреть примеры с картами
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>,
<name> - это имя используемого фрейма. Этот фон используется, когда включен parentFrame, и в основном каждый фрейм имеет такую вещь. Можно эти контроль объяснять как события переключения => при BlzFrameSetEnable(frame, true)
ControlDisabledBackdrop
  • ControlDisabledBackdrop <name 2>,
фон, когда parentFrame отключен. Это второе состояние фрейма, вы можете выйти во время паузы, и ваше изображение фрейма, указанного в ControlBackdrop заменится на изображение фрейма в ControlDisabledBackdrop. Можно эти контроль объяснять как события переключения => при BlzFrameSetEnable(frame, false)
Для кнопок эти указанные фреймы в ControlBackdrop и ControlDisabledBackdrop являются изображением. Для TextButton это обычный фон, тут еще и цвет текст кнопки меняется. Для разных видов фреймов свои необычное изображение, пример CheckBox изображением backdrop является рамка.
Пример, я выключил включенный фрейм
call BlzFrameSetEnable(BlzGetFrameByName("UpperButtonBarMenuButton",0), false)
такого еще можно добиться, если зайти в меню. И игра паузится:
это как и с импортом иконок, вспомните, что существуют BTN для нормального состояния картинки, DISBTN - для отключенного. также и с фреймами
ReplaceableTextures\CommandButtons\BTN<name icon>.blp
ReplaceableTextures\CommandButtonsDisabled\DISBTN<name icon>.blp
К чему я это говорю, вспоминая про импорт? дело в том, что когда вы будете создавать триггерно кнопку, не забудьте указать и ее обратную сторону - Disabled. Иначе будет так во время паузы
Только у менюшек нет Disable, там где паузы нельзя поставить, ставится только игровому интерфейсу
Примечание: для самодельных фреймов делать 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",
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, иначе ничего работать не будет.
ControlStyle "AUTOTRACK|HIGHLIGHTONFOCUS|HIGHLIGHTONMOUSEOVER",
AUTOTRACK - запускает фреймы , заданные в ControlPushedBackdrop и ControlDisabledPushedBackdrop.
HIGHLIGHTONMOUSEOVER - запускает фрейм, заданный в ControlMouseOverHighlight
HIGHLIGHTONFOCUS - запускает фрейм, заданный в ControlFocusHighlight
Эти три параметра ControlStyle отделены между собой | Можете прописать три, или два:
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 находятся тут- по ним можно взять шаблоны и расшифровать данные
Width и Height
Размеры фрейма. Понятное дело, изображение всегда в прямоугольной форме. Width - ширина, Height - высота. Обычно он задается тем фреймам, у которых будет изображение.
Изображение можно подкорректировать триггерной нативкой BlzFrameSetSize(frame, width, height). Без размеров у вас не будет показана изображение.
Width real,
Height real,

Пример:
Width 0.362,
Height 0.037,
Еще есть невидимые фреймы. У них не указано никакое изображение, и им это не нужно. Размер важен, если нужно связать родителя и потомков в одну группу с помощью FRAMEPOINTS. FRAMEPOINTS - точки прямоугольника-фрейма. Если вы перемещаете родителя. То вместе с ним и потомки двигаются.
Однако, размеры мб важны и для кое-чего другого. Пример, кнопка тоже имеет размеры, ей нужны не только для задания размеров иконки, но и для событии. Примеры нажатие/отпускание, ввод/выход курсора мыши и многое другое. Реакция событии важно чтобы курсор лежат внутри кнопки, клик происходил внутри кнопки и пр.
Для того чтобы триггерно изменять размеры фрейма, нужно в fdf файликах тоже задать размеры width height. Иначе, вы не сможете задать размеры в триггерах. Когда тестировал кнопки, часто наблюдал, что если у вас не заданы размеры, то фрейм невидим, тк он фрейм не имеет изначальных размеров Но так бывает не всегда.
Даже для того, чтобы триггерно переместить фрейм в нужную часть экрана, у него должен быть хотя бы размер, тк используем framepoint. framepoints сильно зависят от прямоугольных размеров.
Пример 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 могут быть указаны границы. Часто фреймы копируют с шаблонов, поэтому мб в триггерах не стоит указывать эти границы в шаблоне, тогда вас и не будут мучать эти границы
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).
BackdropTileBackground работает вместе с BackdropBackgroundSize
BackdropBackgroundSize
Работает при включении BackdropTileBackground
размер каждой плитки tile
Пример триггерного кода:
call BlzFrameSetSize(fh, 0.1, 0.1) размер фрейма fh типа backdrop
А вот в fdf фрейме размер плитки tile size:
BackdropBackgroundSize 0.02
BackdropBackground
основное фоновое изображение (background)
Пример кода fdf:
BackdropBackground "ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp",
При отсутствии указания изображения, у вас будет зеленая
BackdropBackgroundInsets
real Right, 
real TOP, 
real Bottom. 
real Left,
Можете задать размеры картинке. Либо растягивать ее, или сжимать. Иногда оч помогает. Например, как реализовать эффект продавливания кнопки?
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|B" а для триггерных функции указать число 5 (1+4)
BackdropCornerSize
размер границ. большее число делает углы более круглыми
0.0 to 1.0
BackdropEdgeFile
Файл границы, эта текстура имеет границу в виде фрагментов рядом друг с другом (игровой интерфейс). Вам не нужны одиночные, если у вас есть этот.
Некоторые frame имеют готовые названия в виде переменных, пример:
BackdropEdgeFile "MultiboardBorder",
что это за файлы можно найти в файлике:
ui/war3skins.txt
получается, что:
MultiboardBorder=UI\Widgets\EscMenu\Human\editbox-border.blp
другой пример, можете сразу писать путь:
BackdropEdgeFile "UI\Widgets\ToolTips\Human\human-tooltip-border.blp",
BackdropLeftFile (одиночная левая граница)
Устанавливаем текстуру для левой части границ
Пример:
BackdropLeftFile "UI\Widgets\ButtonLeft.blp",
BackdropCornerFile (одиночная граница угла)
Устанавливает текстуру для уголков границы
Пример:
BackdropCornerFile "UI\Widgets\ButtonCorners.blp",
BackdropTopFile (одиночная верхняя граница)
Устанавливаем текстуру для верхней части границы
Пример:
BackdropTopFile "UI\Widgets\ButtonTop.blp"
BackdropRightFile (одиночная правая граница)
Устанавливаем текстуру для правой части границы
Пример:
BackdropRightFile "UI\Widgets\ButtonRight.blp",
BackdropBottomFile (одиночная нижняя граница)
станавливает текстуру для нижней части границы
Пример:
BackdropBottomFile "UI\Widgets\ButtonBottom.blp"
BackdropBlendAll
Позволяет видеть объекты под фреймом.
EscMenuPopupMenuArrow=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
BackdropMirrored
изображение зеркально переворачивает справа-налево или слева-направо
При изменении текстур с помощью кода большая часть этого материала становится неактуальной, и фон может быть пустым, за исключением BackdropBackgroundSize, если нужно заполнить плитку. С помощью этого нативного кода можно изменить текстуру по коду.
native BlzFrameSetTexture takes framehandle backdrop, string texFile, integer flag, boolean blend returns nothing
  • texFile - который необходимо указать для использования.
  • flag = 0 или 1. 0 - для растянутого режима; 1 - для режима плитки.
  • blend - имеет какое-то отношение к прозрачности. (false) выглядит странно, если в текстуре используется прозрачность
Использование BlzFrameSetTexture приведет к удалению BackdropEdgeFile.

Можно создавать BACKDROPS без FDF

кратко: как создать backdrop кодом, не используя импорт?
Для создания просто значков на экране даже не нужен 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-код
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"
давайте-ка попробуем вызвать эти 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, чтобы сделать границу меньше или больше и применить некоторые другие настройки.

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
1
2 года назад
0
Вопрос, а если использовать в качестве заднего фона black borders (которые под UI)? Возможно ли с этого сделать не на всю ширину полосу, а, например, только квадратом по центру окна?
0
27
2 года назад
Отредактирован MpW
0
Undert4ker, да можно. Размеры и положение backdrop можно менять. Аналогично, еще границы
наверное имеет виду ConsoleUIBackdrop? Можно его попробовать сдвинуть и изменить размеры. Если не получится, тогда советуют фейковую сделать. Только ConsoleUIBackdrop по свойствам не является обычным Backdrop, тк фон ничего не делает с кликами мыши. возможно из другого типа сделать text, или scrollbar. Плюс, еще картинку. Вам же нужна не кликабельный фон? То эти фреймы отлично подойдут
Чтобы оставить комментарий, пожалуйста, войдите на сайт.