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

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

Содержание:
Checkbox
Checkbox - кнопка с флажком. Она имеет два состояния: включенное (check) / выключенное (UnCheck).
Checkbox (флажок) - это фрейм, у которого как было ранее отмечено 2 состояния: не отмечены (UnChecked) и отмечены (Checked). Это состояние визуально отображается с помощью функции Highlight child-Frame.
короче, Checkbox - это та же самая кнопка, только ей еще добавили два события: CHECKBOX_CHECKED, CHECKBOX_UNCHECKED

fdf - функции CheckBox

fdf-функции немного у checkbox, но многие выше уже разобрали в backdrop, highlight. Это тоже самая кнопка, но тут добавляется переключатель: да/нет.
Теперь у формата CheckBox нужно добавить текстуры для флага/галочки. Эти параметры похожи на Control только для текстуры флага/галочки
CheckBoxCheckHighlight
CheckBoxCheckHighlight "FrameName",
Вы создаете текстуру галочки для CheckBox. Эта текстура используется как тип фрейма HighLight Отображается, когда флажок установлен и включен.
Пример:
//весь код и нужный фрейм можно найти в fdf-скриптах
CheckBoxCheckHighlight "BattleNetRadioButtonHighlightTemplate",
Frame "HIGHLIGHT" "BattleNetRadioButtonHighlightTemplate" {
    HighlightType "FILETEXTURE",
    HighlightAlphaFile "UI\Widgets\Glues\GlueScreen-RadioButton-Button.blp",    
    HighlightAlphaMode "BLEND",
}
backdrop для checkbox
флаг для checkbox
"UI\Widgets\Glues\GlueScreen-RadioButton-Button.blp" Blue point
backdrop для checkbox
флаг для checkbox
CheckBoxDisabledCheckHighlight
CheckBoxDisabledCheckHighlight FrameName,
То же, что и CheckBoxCheckHighlight в отключенном состоянии. Т.е. во время паузы игры ваша меню затемняется.
Пример:
CheckBoxDisabledCheckHighlight "EscMenuDisabledCheckHighlightTemplate",
//весь код и нужный фрейм можно найти в fdf-скриптах
CheckBoxDisabledCheckHighlight "EscMenuDisabledCheckHighlightTemplate",
    Frame "HIGHLIGHT" "EscMenuDisabledCheckHighlightTemplate" {
        DecorateFileNames,
        HighlightType "FILETEXTURE",
        HighlightAlphaFile "EscMenuDisabledCheckHighlight",
        HighlightAlphaMode "BLEND",
}
Для CheckBox добавляются события FRAMEEVENT_CHECKBOX_CHECKED - когда галочка (флаг) включен и FRAMEEVENT_CHECKBOX_UNCHECKED - когда галочка (флаг) выключен. Остальные события аналогично как с кнопкой.

пример CheckBox с fdf

fdf код
Есть образец в fdf-файле UI\FrameDef\glue\battlenettemplates.fdf
// --- CHECKBOX --------------------------------------------------------------------

Frame "GLUECHECKBOX" "EscMenuCheckBoxTemplate" {
    Width 0.024,
    Height 0.024,

    ControlBackdrop "EscMenuCheckBoxBackdrop",
    Frame "BACKDROP" "EscMenuCheckBoxBackdrop" {
        DecorateFileNames,
        BackdropBlendAll,
        BackdropBackground  "EscMenuCheckBoxBackground",
    }

    ControlDisabledBackdrop "EscMenuDisabledCheckBoxBackdrop",
    Frame "BACKDROP" "EscMenuDisabledCheckBoxBackdrop" {
        DecorateFileNames,
        BackdropBlendAll,
        BackdropBackground  "EscMenuDisabledCheckBoxBackground",
    }

    ControlPushedBackdrop "EscMenuCheckBoxPushedBackdrop",
    Frame "BACKDROP" "EscMenuCheckBoxPushedBackdrop" {
        DecorateFileNames,
        BackdropBlendAll,
        BackdropBackground  "EscMenuCheckBoxPushedBackground",
    }

    CheckBoxCheckHighlight "EscMenuCheckHighlightTemplate",
    Frame "HIGHLIGHT" "EscMenuCheckHighlightTemplate" {
        DecorateFileNames,
        HighlightType "FILETEXTURE",
        HighlightAlphaFile "EscMenuCheckBoxCheckHighlight",
        HighlightAlphaMode "BLEND",
    }

    CheckBoxDisabledCheckHighlight "EscMenuDisabledCheckHighlightTemplate",
    Frame "HIGHLIGHT" "EscMenuDisabledCheckHighlightTemplate" {
        DecorateFileNames,
        HighlightType "FILETEXTURE",
        HighlightAlphaFile "EscMenuDisabledCheckHighlight",
        HighlightAlphaMode "BLEND",
    }
}
jass код:
//Create "EscMenuCheckBoxTemplate", for game UI
    local framehandle buttonFrame = BlzCreateFrame("EscMenuCheckBoxTemplate", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
// Place the buttonFrame to the center of the screen
    call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.4, 0.3)
// Give that buttonFrame a size
    call BlzFrameSetSize(buttonFrame, 0.05, 0.05)
Заметка: почему-то триггер не создает без toc-file, хотя эти файлы изначально лежат в архиве игры, я почему-то не смог создать фрейм без toc-file. Дело в том, что игра не все файлы fdf загружает в игру. Нужно загрузить игру будет файл с помощью импорта
через прописку IncludeFile "UI\FrameDef\glue\battlenettemplates.fdf",
или скопировать фрейм из этого fdf файла и загрузить файл
Вот код из фрейма BattleNetRadioButtonTemplate в файле UI\FrameDef\glue\battlenettemplates.fdf, поменял названия, остальное все также.
fdf код
Frame "CHECKBOX" "MyRadioButtonTemplate" {
    Width 0.024,
    Height 0.024,

    ControlBackdrop "MyRadioButtonBackdrop",
    Frame "BACKDROP" "MyRadioButtonBackdrop" {
        BackdropBlendAll,
        BackdropBackground  "UI\Widgets\Glues\GlueScreen-RadioButton-Background.blp",
    }

    ControlPushedBackdrop "MyRadioButtonPushedBackdrop",
    Frame "BACKDROP" "MyRadioButtonPushedBackdrop" {
        BackdropBlendAll,
        BackdropBackground  "UI\Widgets\Glues\GlueScreen-RadioButton-BackgroundPressed.blp",
    }

    ControlDisabledBackdrop "MyCheckBoxDisabledBackdrop",
    Frame "BACKDROP" "MyCheckBoxDisabledBackdrop" {
        BackdropBlendAll,
        BackdropBackground  "UI\Widgets\Glues\GlueScreen-Checkbox-BackgroundDisabled.blp",
    }

    CheckBoxCheckHighlight "MyRadioButtonHighlightTemplate",
    Frame "HIGHLIGHT" "MyRadioButtonHighlightTemplate" {
        HighlightType "FILETEXTURE",
        HighlightAlphaFile "UI\Widgets\Glues\GlueScreen-RadioButton-Button.blp",    
        HighlightAlphaMode "BLEND",
    }

    CheckBoxDisabledCheckHighlight "MyDisabledRadioButtonHighlightTemplate",
    Frame "HIGHLIGHT" "MyDisabledRadioButtonHighlightTemplate" {
        HighlightType "FILETEXTURE",
        HighlightAlphaFile "UI\Widgets\Glues\GlueScreen-RadioButton-ButtonDisabled.blp",    
        HighlightAlphaMode "BLEND",
    }
}
код jass
//Create "MyRadioButtonTemplate", for game UI
    local framehandle buttonFrame = BlzCreateFrame("MyRadioButtonTemplate", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
// Place the buttonFrame to the center of the screen
    call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.4, 0.3)
// Give that buttonFrame a size
    call BlzFrameSetSize(buttonFrame, 0.05, 0.05)

пример Checkbox без импорта FDF

Поскольку в игре есть несколько шаблонов Checkbox, и они загружены по умолчанию. То можно использовать для создания Checkbox, используя только код без импорта. Если конечно знаете название фрейма, что брать данные этого фрейма.
Возможные варианты: QuestCheckBox, QuestCheckBox2, QuestCheckBox3. Все они используют текстуры EscMenu, но имеют разные размеры. Хотя это не имеет большого значения, можно просто изменить размер с помощью BlzFrameSetSize
Этот код Lua работает по умолчанию и создает небольшой флажок в центре экрана.
код
do
    local real = MarkGameStarted
 function MarkGameStarted()
    real()

    local frame = BlzCreateFrame("QuestCheckBox2",  BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
    local trigger = CreateTrigger()
    BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.4, 0.3)

    BlzTriggerRegisterFrameEvent(trigger, frame, FRAMEEVENT_CHECKBOX_CHECKED)
    BlzTriggerRegisterFrameEvent(trigger, frame, FRAMEEVENT_CHECKBOX_UNCHECKED)
    TriggerAddAction(trigger, function()
        if BlzGetTriggerFrameEvent() == FRAMEEVENT_CHECKBOX_CHECKED then
            print("CheckBox was checked")
        else
            print("CheckBox was unchecked")
        end
    end)
 end
end
Также можно использовать 2 других флажка:
«ScoreScreenBottomCheckButtonTemplate» - это только выделение при наведении курсора мыши, а отмеченная текстура - желтый свет. По умолчанию загружается. Может использоваться вместе с BACKDROP.
И есть «EscMenuRadioButtonTemplate», не загруженный по умолчанию, для этого нужно было бы загрузить UI \ FrameDef \ UI \ escmenutemplates.fdf в игру перед его использованием. (см. выше мы уже создавали его)

Образцы для CheckBox из fdf-файлов

Вы можете подобрать понравившиеся рамочки и флаги для кнопки CheckBox из ссылки Зачем это нужно? чтобы не терять время и сразу посмотреть на эти CheckBox. Есть конечно вот это но вы убьете слишком много времени. Я именно так и поступал.

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...