Меню

Объект меню

Информация

Меню... Думаю, вам не нужно объяснять, что значит это слово, ведь каждый из вас хоть раз включал/выключал функции в ClickGui чита, или сидел в настройках майнкрафта. Это всё Меню.

Создание меню может показаться немного сложным для новичков, но я попытаюсь объяснять как можно чётче.

Как создавать меню?

Предоставляю вам "Шаблон" для меню с комментариями.

script:name("Menu Example") -- Имя скрипта
script:devs({"ConeTin"}) -- Разработчики
script:desc("Menu Tutorial") -- Описание

-- Модуль, при включении которой будет открываться меню
ClickGui = module.new("Menu", "Шаблонное меню")

-- Создаём меню
menu = {
    -- Каждую из последующих функций можно убирать
    -- В скобках у каждой функции написаны аргументы, которые можно использовать только внутри этой функции
    -- Каждую функцию можно использовать только один раз(т.е не может быть 2 раза render)
    -- После каждой функции обязательно нужно ставить запятую

    init = function()
        -- Код, прописанный здесь будет воспроизводиться при входе в меню
    end,

    render = function(mouseX, mouseY) 
        -- Код, вписанный здесь будет воспроизводиться при рендере
        -- Здесь можно прописать, допустим, код заднего фона, текста и т.д
    end,

    mouseClicked = function(mouseX, mouseY, button)
        -- Код, вписанный здесь будет воспроизводиться при клике мышкой
        -- Здесь можно прописать, допустим, обработку нажатий по кнопкам
    end,

    mouseReleased = function(mouseX, mouseY, button)
        -- Код, вписанный здесь будет воспроизводиться при отжатии мышки
    end,

    mouseDragged = function(dragX, dragY, button)
        -- Код, вписанный здесь будет воспроизводиться при "перетаскивании"
        -- Здесь можно прописать, допустим, перетаскивание вашего меню
    end,

    mouseScrolled = function(mouseX, mouseY, delta)
        -- Код, вписанный здесь будет воспроизводиться при скролле мышкой
        -- Здесь можно прописать, допустим, листание функций в вашем меню
    end,

    keyPressed = function(keyCode)
        -- Код, вписанный здесь будет воспроизводиться при нажатии клавиши на клавиатуре
    end,

    keyReleased = function(keyCode)
        -- Код, вписанный здесь будет воспроизводиться при отжатии клавиши на клавиатуре
    end,

    tick = function()
        -- Код, вписанный здесь будет воспроизводиться при каждом тике (20 раз в секунду)
        -- Здесь можно прописать, допустим, обновление чего-либо
    end,
}

-- При включении модуля открываем меню
ClickGui:on_enable(function()
    client:display(menu)
end)

Редактирование меню

Далее я наглядно покажу как наполнить меню элементами.

Фон и перетаскивание меню

Для начала создадим переменные, которые будут отвечать за координаты меню и его размеры.

width = 445
height = 250
x = 0
y = 0

В init пропишем расчёт координат основываясь на размерах экрана(сделаем чтобы меню было по центру)

init = function()
        -- Вычисляем середину экрана и вычитаем половину из размера меню
        x = client:screen_width() / 2 - width / 2
        y = client:screen_height() / 2 - height / 2
end,

В render пропишем отрисовывание прямоугольника на наших координатах

render = function(mouseX, mouseY) 
        render:rect(x, y, width, height, 10, client:theme_main())
end,

А в mouseDragged пропишем перетаскивание меню

mouseDragged = function(dragX, dragY, button)
        -- Прибавляем позицию перетаскивания к текущему x и y
        x = x + dragX
        y = y + dragY
end,

В итоге у нас получается такой код:

script:name("Menu Example") -- Имя скрипта
script:devs({"ConeTin"}) -- Разработчики
script:desc("Menu Tutorial") -- Описание

ClickGui = module.new("Menu", "Шаблонное меню")

width = 445
height = 250
x = 0
y = 0

menu = {
    init = function()
        -- Вычисляем середину экрана и вычитаем половину из размера меню
        x = client:screen_width()/2 - width/2
        y = client:screen_height()/2 - height/2
    end,

    render = function(mouseX, mouseY) 
        render:rect(x, y, width, height, 10, client:theme_main())
    end,

    mouseDragged = function(dragX, dragY, button)
        -- Прибавляем позицию перетаскивания к текущему x и y
        x = x + dragX
        y = y + dragY
    end,
}

-- При включении модуля открываем меню
ClickGui:on_enable(function()
    client:display(menu)
end)

В игре меню выглядит так:

Обработка нажатий

Добавим кнопку закрытия меню

Для начала нужно нарисовать текст, чтобы пользователь знал, куда кликать

render = function(mouseX, mouseY) 
        render:rect(x, y, width, height, 10, client:theme_main())
        -- Добавили текст
        render:text("Закрыть меню", x + 5, y + 5, client:theme_text())
end,

Теперь нам нужно написать саму обработку нажатий. Чтобы её сделать можно воспользоваться функцией mouseClicked и функцией из библиотеки math:hovered().

mouseClicked = function(mouseX, mouseY, button)
        -- "x + 5" и "y + 5" - Координаты текста
        -- render:text_width("Закрыть меню") - Длина текста
        -- 10 - Примерная высота текста
        if math:hovered(x + 5, y + 5, render:text_width("Закрыть меню"), 10, mouseX, mouseY) then
            player:close_menu() -- Закрываем меню
        end
end,

Вуаля! Меню теперь закрывается при нажатии на кнопку, точно таким же образом можно добавить новые кнопки и обработку для них.

Last updated