Меню... Думаю, вам не нужно объяснять, что значит это слово, ведь каждый из вас хоть раз включал/выключал функции в 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 пропишем отрисовывание прямоугольника на наших координатах
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 = 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,
Вуаля! Меню теперь закрывается при нажатии на кнопку, точно таким же образом можно добавить новые кнопки и обработку для них.