Добавлен MpW,
опубликован
Основы Интерфейса
Содержание:
TEXT - это тип фрейма, который имеет несколько применений: он отображает текст на экране или стилизует текст более сложного фрейма. В отличие от String для SimpleFrames, TEXT обладает невидимой прямоугольной рамкой, и расширяется в зависимости от объема текста. Но если задать строгие размеры (можно задать ширину и высоту фрейма), то текст весь влезает только в пределах размеров, а тот что не влез, отсекается.
Также размеры можно обнулить. Пример tooltips, там подсказка расширяется в зависимости от объема текста. Как такое реализовать? ну например, можно зафиксировать размеры: указываем ширину, а высоту обнуляют специально. Чтобы динамично менялся размер высоты TEXT в зависимости от объема текста в нем. Главно зафиксировать на экране. Это то что я понял. высоту обнуляют специально. Чтобы текст расширялся вверх или вниз, а ширина останется такой же. Если привязать нижнюю точку FRAMEPOINT_BOTTOM какому-нибудь другому фрейму, то текст будет вверх расширяться. Иначе, если привязать FRAMEPOINT_TOP наверху, то текст будет вниз опускать. Можно и ширину обнулить. тогда у текста не будет ограничении. Что за ограничения? если размеры есть. То текст должен влез в эти границы. то что не влезает, то та часть отсекается, что не влезла
TEXT может иметь различные Frameevents и будет контролировать пространство экрана, занимаемое его размером или отображаемым текстом (короче в этой прямоугольной области никак нельзя кликнуть по кнопке или по другим объектам за TEXT). Если кто-то этого не хочет, можно отключить TEXT-Frame с помощью BlzFrameSetEnable(frame, false)
Когда он используется как стиль, он определяется как функциональный дочерний фрейм для кнопки в fdf. Как показано ниже, текст является потомком кнопки. Этот код добавляет кнопке текст.
ButtonText "HelpButtonText",
Frame "TEXT" "HelpButtonText" INHERITS "EscMenuButtonTextTemplate" {
Text "KEY_HELP",
}
У кнопки есть разные состояния: нормальный, выключенный, зажата кнопка, наведена на нее мышь. И в разных ситуациях также может и текст менять шрифт и цвет. У текста такой же список состояния. Эти состояния задают в fdf-files. Щас будем рассматривать fdf функции текста
функции Text fdf
Некоторые типы фреймов имеют одинаковые функции, пример TEXT и String - разные типы, но они похожи.
Внутри fdf можно настроить цвет String/TEXT с помощью некоторых fdf функции. Но также можно раскрасить текст цветовыми кодами warcraft 3 при установке текста в качестве префикса |cff0021ff.
конвертер цветов
конвертер цветов
FontColor
FontColor red green blue alpha,
FontColor red green blue,
FontColor red green blue,
Пример:
FontColor 1.0 0.201 1.0 1.0,
FontColor 1.0 0.201 1.0 1.0,
Цвет текста в включенном состоянии. аналогично как и здесь примерно
Пример:
FontColor 0.0 1.0 0.0 1.0
FontColor 0.0 1.0 0.0 1.0
Пример кнопка UpperButtonBarMenuButton имеет
NormalText "UpperButtonBarButtonTextTemplate" "KEY_MENU",
String "UpperButtonBarButtonTextTemplate" {
Font "MasterFont",0.01,
FontColor 1.0 1.0 1.0,
}
В норм состоянии текст кнопки (без текста горячей кнопки) выглядит так:
FontDisabledColor
FontDisabledColor red green blue alpha,
FontDisabledColor red green blue,
FontDisabledColor red green blue,
Цвет текста меняет цвет, когда фрейм текста выключен. Тут имеется в виду, не то чтобы текст должен выключится, и исчезнуть. Такого не происходит, тк большинство текстов привязаны к родителям.
По большинству blizzard примеров с FontDisabledColor, текст сильно затемняется (r=0.2 g=0.2 b=0.2 - темно-серый).
В качестве примера в fdf выставил фрейму такой цвет:
FontDisabledColor 1.0 0.0 0.0 1.0,
В lua code создал текст, и выключил кодом:
BlzFrameSetEnable(TooltipTextFrame, false)
FontDisabledColor 1.0 0.0 0.0 1.0,
В lua code создал текст, и выключил кодом:
BlzFrameSetEnable(TooltipTextFrame, false)
Пример кнопка UpperButtonBarMenuButton имеет
DisabledText "UpperButtonBarButtonDisabledTextTemplate" "MENU",
String "UpperButtonBarButtonDisabledTextTemplate" INHERITS "UpperButtonBarButtonTextTemplate" {
FontColor 0.4 0.4 0.4,
}
В режиме паузы текст кнопки выглядит так:
DisabledText "UpperButtonBarButtonDisabledTextTemplate" "MENU",
String "UpperButtonBarButtonDisabledTextTemplate" INHERITS "UpperButtonBarButtonTextTemplate" {
FontColor 0.4 0.4 0.4,
}
В режиме паузы текст кнопки выглядит так:
FontHighlightColor
FontHighlightColor red green blue alpha,
FontHighlightColor red green blue,
FontHighlightColor red green blue,
Цвет шрифта меняется, когда на родителя навели мышь, т.е. имеет focus. Пример с кнопкой, когда вы наводите курсор мыши на кнопку, сама кнопка подсвечивается. Одновременно, и цвет текст меняет
Пример кнопка UpperButtonBarMenuButton имеет
HighlightText "UpperButtonBarButtonHighlightTextTemplate" "KEY_MENU",
String "UpperButtonBarButtonHighlightTextTemplate" INHERITS "UpperButtonBarButtonTextTemplate" {
FontColor 1.0 0.83 0.07,
}
Когда курсор мыши наводите на кнопку, цвет кнопки тоже
FontShadowColor
FontShadowColor red green blue alpha,
FontShadowColor red green blue,
FontShadowColor red green blue,
Задает цвет тени для текста
FontShadowColor работает совместно с FontShadowOffset
FontShadowOffset
FontJustificationH, FontJustificationV, FontJustificationOffset
Фрейм TEXT имеет невидимую прямоугольную рамку.
Вы можете задавать размер ширины и высоты рамки фрейма. Даже когда вы создадите фрейм TEXT, вы в этой области не можете кликать по объектам, тк клик идет по нашему TEXT. Это доказанный факт
для этих строчек указывают расположение текста внутри, короче это такое выравнивание текста. TextAlignment важен только тогда, когда текст задан прямоугольником. внутри Fdf разделены горизонтальное и вертикальное выравнивание:
nati
BlzFrameSetTextAlignment takes framehandle frame, textaligntype vert, textaligntype horz
BlzFrameSetTextAlignment takes framehandle frame, textaligntype vert, textaligntype horz
Выравнивание по горизонтали (horizontal). Когда текстовому фрейму задан прямоугольник, он будет располагать отображаемый текст по оси X в этом TextJustify:
JUSTIFYRIGHT - по правому краю
JUSTIFYLEFT - по левому краю
JUSTIFYCENTER - в центре
JUSTIFYRIGHT - по правому краю
JUSTIFYLEFT - по левому краю
JUSTIFYCENTER - в центре
Выравнивание по вертикали (vertical). Когда текстовому фрейму задан прямоугольник, он будет располагать отображаемый текст по оси Y в этом TextJustify. :
JUSTIFYTOP - по верхнему краю
JUSTIFYMIDDLE - посередине
JUSTIFYBOTTOM - по нижнему краю
JUSTIFYTOP - по верхнему краю
JUSTIFYMIDDLE - посередине
JUSTIFYBOTTOM - по нижнему краю
FontJustificationOffset x y,
Отображает текст со смещением относительно положения его фреймов.
Отображает текст со смещением относительно положения его фреймов.
Если тексту присвоена только точка, это будет однострочный текст. В таком случае тип используемой точки может определять направление, в котором будет расширяться текст, с большим количеством текстовых символов. С TOP, CENTER и BOTTOM текст будет расширяться одинаково с обеих сторон, данная точка является центром. <|> С TOPLEFT, LEFT и BOTTOMLEFT текст будет расширяться вправо. |> С RIGHT, TOPRIGHT и RIGHT текст будет расширяться влево. <| Это может быть важно, когда текстовый фрейм находится рядом с границей 4:3, когда текст расширяется до области 16:9, часть текста текстового фрейма не отображается.
На изображении BACKDROP имеет больший размер, чем TEXT-Frames, поэтому можно четко видеть границу прямоугольника и текст.
На изображении BACKDROP имеет больший размер, чем TEXT-Frames, поэтому можно четко видеть границу прямоугольника и текст.
Фрейм TEXT имеет невидимую прямоугольную рамку.
Вы можете задавать размер ширины и высоты рамки фрейма. Даже когда вы создадите фрейм TEXT, вы в этой области не можете кликать по объектам, тк клик идет по нашему TEXT. Это доказанный факт
для этих строчек указывают расположение текста внутри, короче это такое выравнивание текста. TextAlignment важен только тогда, когда текст задан прямоугольником. внутри Fdf разделены горизонтальное и вертикальное выравнивание:
native BlzFrameSetTextAlignment takes framehandle frame, textaligntype vert, textaligntype horz
Выравнивание по горизонтали (horizontal). Когда текстовому фрейму задан прямоугольник, он будет располагать отображаемый текст по оси X в этом TextJustify:
JUSTIFYRIGHT - по правому краю
JUSTIFYLEFT - по левому краю
JUSTIFYCENTER - в центре
JUSTIFYRIGHT - по правому краю
JUSTIFYLEFT - по левому краю
JUSTIFYCENTER - в центре
Выравнивание по вертикали (vertical). Когда текстовому фрейму задан прямоугольник, он будет располагать отображаемый текст по оси Y в этом TextJustify:
JUSTIFYTOP - по верхнему краю
JUSTIFYMIDDLE - посередине
JUSTIFYBOTTOM - по нижнему краю
JUSTIFYTOP - по верхнему краю
JUSTIFYMIDDLE - посередине
JUSTIFYBOTTOM - по нижнему краю
FontJustificationOffset x y,
Отображает текст со смещением относительно положения его фреймов.
Отображает текст со смещением относительно положения его фреймов.
Если тексту присвоена только точка, это будет однострочный текст. В таком случае тип используемой точки может определять направление, в котором будет расширяться текст, с большим количеством текстовых символов. С TOP, CENTER и BOTTOM текст будет расширяться одинаково с обеих сторон, данная точка является центром. <|> С TOPLEFT, LEFT и BOTTOMLEFT текст будет расширяться вправо. |> С RIGHT, TOPRIGHT и RIGHT текст будет расширяться влево. <| Это может быть важно, когда текстовый фрейм находится рядом с границей 4:3, когда текст расширяется до области 16:9, часть текста текстового фрейма не отображается.
На изображении BACKDROP имеет больший размер, чем TEXT-Frames, поэтому можно четко видеть границу прямоугольника и текст.
На изображении BACKDROP имеет больший размер, чем TEXT-Frames, поэтому можно четко видеть границу прямоугольника и текст.
код lua-код пример:
do
local real = MarkGameStarted
function MarkGameStarted()
real()
--the displayed texts
local texts = {
"TOP LEFT",
"TOP Center",
"TOP RIGHT",
"Middle LEFT",
"Middle Center",
"Middle RIGHT",
"Bottom LEFT",
"Bottom Center",
"Bottom RIGHT"
}
--the text justifiers
local justify = {
{TEXT_JUSTIFY_TOP, TEXT_JUSTIFY_LEFT},
{TEXT_JUSTIFY_TOP, TEXT_JUSTIFY_CENTER},
{TEXT_JUSTIFY_TOP, TEXT_JUSTIFY_RIGHT},
{TEXT_JUSTIFY_MIDDLE, TEXT_JUSTIFY_LEFT},
{TEXT_JUSTIFY_MIDDLE, TEXT_JUSTIFY_CENTER},
{TEXT_JUSTIFY_MIDDLE, TEXT_JUSTIFY_RIGHT},
{TEXT_JUSTIFY_BOTTOM , TEXT_JUSTIFY_LEFT},
{TEXT_JUSTIFY_BOTTOM , TEXT_JUSTIFY_CENTER},
{TEXT_JUSTIFY_BOTTOM , TEXT_JUSTIFY_RIGHT}
}
local back = BlzCreateFrame("QuestButtonBaseTemplate",BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
BlzFrameSetSize(back, 0.28, 0.28)
BlzFrameSetAbsPoint(back, FRAMEPOINT_CENTER, 0.4, 0.3)
for index = 1, 9 do
local textFrame = BlzCreateFrameByType("TEXT", "", back,"",0)
BlzFrameSetAbsPoint(textFrame, FRAMEPOINT_CENTER, 0.4, 0.3)
BlzFrameSetSize(textFrame, 0.25, 0.25)
BlzFrameSetTextAlignment(textFrame, justify[index][1], justify[index][2])
BlzFrameSetText(textFrame, texts[index])
end
end
end
Text
Сюда вы сможете написать текст
Пример:
Text "Привет мир"
Пример:
Text "Привет мир"
Однако, в fdf-files blizzard предпочитают не использовать тексты, вместо них вставляют названия переменных.
в скобках пишут название переменной
"MESSAGING"
Но сам текст описания MESSAGING не смог найти. Это где то в архивах игры поискать нужно
в скобках пишут название переменной
"MESSAGING"
Но сам текст описания MESSAGING не смог найти. Это где то в архивах игры поискать нужно
Описание текстов в fdf записаны в переменные, и их можно просмотреть в редакторе карт WE в GameInterface
Однако, текст вроде "Привет мир" не всегда может отобразиться в игре. На другом компьютере у меня почему-то не отобразился этот текст из fdf-file. Как обойти это? может триггерно обратиться к этому фрейму, и изменить текст. См. ниже пример.
FontFlags
No idea
Пример:
FontFlags "FIXEDSIZE",
Пример:
FontFlags "FIXEDSIZE",
FrameFont
FrameFont FontName, size, text,
Пример:
FrameFont "MasterFont", 0.011, "",
FrameFont "MasterFont", 0.011, "",
FontName - шрифт, чтобы разобраться в fdf какие шрифты действительны, вы обязаны посмотреть в ui\war3skins/txt - именно в этой папке сможете понять что за шрифт MasterFont такой. В ui\war3skins.txt вы сможете указать шрифты из fonts\name.ttf
MasterFont действителен, когда в том же кадре используется DecorateFileNames, в противном случае вы пишете filePath (указываете путь).
size - размер шрифта
text - текст
size - размер шрифта
text - текст
Font
Font FontName, size,
Пример:
Font "InfoPanelTextFont", 0.009,
Font "InfoPanelTextFont", 0.009,
Стилизует текст строки как дочерний текстовый фрейм для SIMPLEFRAME.
Fonts (Шрифты)
Warcraft 3 (Reforged V1.32.2) имеет шрифты для всех языков, найденных внутри war3.w3mod: шрифты лежат в игре в папке "Fonts\name":
2002.ttf
2002b.ttf
arheigb_bd.ttf
arheiu20m.ttf
arheiu20_md.ttf
arlishuu20_db.ttf
arlishuu30_md.ttf
bl.ttf
blizzardglobal-v5_4.ttf
blq55.ttf
blq55web.ttf
blq85web.ttf
dffn_b31.ttf
dfheilt.ttf
dfheimd.ttf
dfkgothicmd.ttf
dfst-m3u.ttf
frizqt__.ttf
ghei00b_t.ttf
inconsolata-regular.ttf
nimrodmt.ttf
nim_____.ttf
thowr___.ttf
tt5500m_.ttf
ulei00m.ttf
Внутри fdf-файлов не указывают путь к этим ttf, и никак не используется. вы можете заменить в папке ui \ war3skins.txt шрифты или создать свои собственные. Если вы хотите использовать такой шрифт в фрейме потребуется прописать в fdf-файле fdf-действие: "DecorateFileNames," (это действие ищет данные, данное действие доступно в warcraft 3 версии 1.32).
Эти шрифты также могут использоваться в коде при использовании функции SkinManagerGetLocalPath. Например: SkinManagerGetLocalPath ("MasterFont"), чтобы получить путь к файлу "Fonts\BLQ55Web.ttf" из этого файла (из Warcraft 3 V1.32.2)
Эти шрифты также могут использоваться в коде при использовании функции SkinManagerGetLocalPath. Например: SkinManagerGetLocalPath ("MasterFont"), чтобы получить путь к файлу "Fonts\BLQ55Web.ttf" из этого файла (из Warcraft 3 V1.32.2)
// шрифты могут быть опционально переопределены локализацией
// Каждое свойство шрифта сначала будет запрошено с помощью <property> _ <locale>, и игра будет использовать эту версию, если она существует.
// Если свойство, специфичное для локализации, или не существует, оно будет возврат к имени свойства без тега <locale>.
// Например, чтобы переопределить основной шрифт для корейского языка, вы должны добавить новую запись // MasterFont: koKR = Fonts \ DFHeiMd.ttf //
// MasterFont:koKR=Fonts\DFHeiMd.ttf
//
// fonts - default
MasterFont=Fonts\BLQ55Web.ttf
MasterFontBold=Fonts\BLQ85Web.ttf
MessageFont=Fonts\BLQ55Web.ttf
ChatFont=Fonts\BLQ55Web.ttf
EscMenuTextFont=Fonts\BLQ55Web.ttf
InfoPanelTextFont=Fonts\BLQ55Web.ttf
TextTagFont=Fonts\BLQ55Web.ttf
Как создать Text без FDF?
как создать TEXT кодом, не прибегая к импорту fdf?
lua-code
do
local real = MarkGameStarted
function MarkGameStarted()
real()
-- create a TEXT Frame
local frame = BlzCreateFrameByType("TEXT", "MyTextFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
-- Set the current Text, you can use the Warcraft 3 Color Code
BlzFrameSetText(frame, "Text on |cffffcc00Screen|r")
-- pos the frame
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.4, 0.3)
-- stop this frame from taking control of the mouse input, Might have sideeffects if the TEXT-Frame has an enable Color (but this does not have such).
BlzFrameSetEnable(frame, false)
-- the text is kinda small, but one can not use the FontNative onto TEXT-Frames (nether in V1.31 nor V1.32). Therefore one could scale it.
BlzFrameSetScale(frame, 2)
end
end
как создать TEXT c помощью fdf-импорта?
Можно попробовать использовать backdrop, и к нему привязать текст
fdf-код связки backdrop + text
Frame "TEXT" "MyTextTemplate" { //Шаблон текста
DecorateFileNames,
FrameFont "EscMenuTextFont", 0.011, "",
FontJustificationH JUSTIFYLEFT,
FontJustificationV JUSTIFYMIDDLE,
FontFlags "FIXEDSIZE",
FontColor 0.99 0.827 0.0705 1.0,
FontHighlightColor 1.0 1.0 1.0 1.0,
FontDisabledColor 0.2 0.2 0.2 1.0,
FontShadowColor 0.0 0.0 0.0 0.9,
FontShadowOffset 0.002 -0.002,
}
Frame "BACKDROP" "MyBackdrop" {
DecorateFileNames,
BackdropTileBackground,
BackdropBackground "QuestDialogNormalBackground",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundSize 0.128,
BackdropBackgroundInsets 0.005 0.005 0.005 0.005,
BackdropEdgeFile "QuestDialogNormalBorder",
//Создаем текст MyText с помощью шаблона MyTextTemplate
Frame "TEXT" "MyText" INHERITS "MyTextTemplate" {
SetPoint LEFT, "MyBackdrop", LEFT, 0.01, 0.0,
FontJustificationH JUSTIFYLEFT,
Text "Привет мир",
}
}
lua-code
do
local real = MarkGameStarted
function MarkGameStarted()
real()
BlzLoadTOCFile("war3mapimported\\templates.toc") --не забудьте toc-file загрузить
local backdrop = BlzCreateFrame("MyBackdrop", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
BlzFrameSetSize(backdrop, 0.1, 0.1)
BlzFrameSetAbsPoint(backdrop, FRAMEPOINT_CENTER, 0.4, 0.3)
end
end
Переделка кода
Заметка: в файле fdf Text ”Привет мир”, может не всегда отобразиться этот текст. Не знаю причины. Но на другом компьютере этот текст не отображается. Пришлось подкорректировать jass-код:
lua-code
do
local real = MarkGameStarted
function MarkGameStarted()
real()
BlzLoadTOCFile("war3mapimported\\templates.toc") --не забудьте toc-file загрузить
local backdrop = BlzCreateFrame("MyBackdrop", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
local text = BlzGetFrameByName("MyText",0) --получаем text-children
BlzFrameSetSize(backdrop, 0.1, 0.1)
BlzFrameSetAbsPoint(backdrop, FRAMEPOINT_CENTER, 0.4, 0.3)
BlzFrameSetText(text, "всем привет") --привычный “привет мир” изменил на “всем привет”
end
end
Как создать только текст
fdf-file
Frame "TEXT" "MyTextTemplate" { //Шаблон текста
DecorateFileNames,
FrameFont "EscMenuTextFont", 0.011, "",
FontJustificationH JUSTIFYLEFT,
FontJustificationV JUSTIFYMIDDLE,
FontFlags "FIXEDSIZE",
FontColor 0.99 0.827 0.0705 1.0,
FontHighlightColor 1.0 1.0 1.0 1.0,
FontDisabledColor 0.2 0.2 0.2 1.0,
FontShadowColor 0.0 0.0 0.0 0.9,
FontShadowOffset 0.002 -0.002,
}
//Создаем текст MyText с помощью шаблона MyTextTemplate
Frame "TEXT" "MyText" INHERITS "MyTextTemplate" {
Text "Привет мир",
}
lua-code
do
local real = MarkGameStarted
function MarkGameStarted()
real()
BlzLoadTOCFile("war3mapimported\\templates.toc") --не забудьте toc-file загрузить
local text = BlzCreateFrame("MyText", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
BlzFrameSetSize(text, 0.1, 0.1)
BlzFrameSetAbsPoint(text, FRAMEPOINT_CENTER, 0.4, 0.3)
end
end
Образцы текста из fdf
Используйте готовые шаблоны текстов TEXT, вы можете не утруждать себя с размерами, шрифтами, подсветкой и пр.
Используйте образцы текстов
Используйте образцы текстов
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW