• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Помогите с драг системой

xRATx
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Янв 2019
Сообщения
250
Реакции
29
Таааак, чуть разобравшись, я ее сделал, но..... мышка захватывает по всему экрану объект, помогите и в любом элементе меню оно хватается
JavaScript:
Expand Collapse Copy
local drag = false
local offsetX = 0
local offsetY = 0
local width = 0
if client.key_state(0x01) then
        local mouse_x, mouse_y = ui.mouse_position()
        if not drag then
            if ui.mouse_position(mouse_x, mouse_y, 954, 690, 270, 5, 139) then
                drag = true
                offsetX = mouse_x - x
                offsetY = mouse_y - y
            end
        else
            x = mouse_x - offsetX
            y = mouse_y - offsetY
            ui.set(Zx, x)
            ui.set(Zy, y)
        end
    else
        drag = false
    end
function clientmouseposition(mouse_x, mouse_y, rect_x, rect_y, rect_w, rect_h)
    return mouse_x >= rect_x and mouse_x <= rect_x + rect_w and mouse_y >= rect_y and mouse_y <= rect_y + rect_h
end
 
Код с гпт

Проблема заключается в том, что вы не используете функцию clientmouseposition для проверки, находится ли курсор мыши в пределах определённой области. Вместо этого вы используете ui.mouse_position, которая, судя по всему, не ограничивает область захвата. Это приводит к тому, что объект захватывается в любом месте экрана.

code_language.lua:
Expand Collapse Copy
local drag = false
local offsetX = 0
local offsetY = 0
local x, y = 0, 0  -- Начальные координаты объекта, который вы хотите перемещать

-- Функция для проверки, находится ли курсор мыши в пределах прямоугольника
function clientmouseposition(mouse_x, mouse_y, rect_x, rect_y, rect_w, rect_h)
    return mouse_x >= rect_x and mouse_x <= rect_x + rect_w and mouse_y >= rect_y and mouse_y <= rect_y + rect_h
end

if client.key_state(0x01) then  -- Проверяем, нажата ли левая кнопка мыши (0x01)
    local mouse_x, mouse_y = ui.mouse_position()  -- Получаем текущие координаты мыши

    if not drag then
        -- Проверяем, находится ли курсор мыши в пределах заданной области
        if clientmouseposition(mouse_x, mouse_y, 954, 690, 270, 139) then
            drag = true  -- Начинаем перетаскивание
            offsetX = mouse_x - x  -- Вычисляем смещение по X
            offsetY = mouse_y - y  -- Вычисляем смещение по Y
        end
    else
        -- Если перетаскивание активно, обновляем координаты объекта
        x = mouse_x - offsetX
        y = mouse_y - offsetY
        ui.set(Zx, x)  -- Обновляем позицию объекта по X
        ui.set(Zy, y)  -- Обновляем позицию объекта по Y
    end
else
    drag = false  -- Если кнопка мыши отпущена, прекращаем перетаскивание
end
 
Код с гпт

Проблема заключается в том, что вы не используете функцию clientmouseposition для проверки, находится ли курсор мыши в пределах определённой области. Вместо этого вы используете ui.mouse_position, которая, судя по всему, не ограничивает область захвата. Это приводит к тому, что объект захватывается в любом месте экрана.

code_language.lua:
Expand Collapse Copy
local drag = false
local offsetX = 0
local offsetY = 0
local x, y = 0, 0  -- Начальные координаты объекта, который вы хотите перемещать

-- Функция для проверки, находится ли курсор мыши в пределах прямоугольника
function clientmouseposition(mouse_x, mouse_y, rect_x, rect_y, rect_w, rect_h)
    return mouse_x >= rect_x and mouse_x <= rect_x + rect_w and mouse_y >= rect_y and mouse_y <= rect_y + rect_h
end

if client.key_state(0x01) then  -- Проверяем, нажата ли левая кнопка мыши (0x01)
    local mouse_x, mouse_y = ui.mouse_position()  -- Получаем текущие координаты мыши

    if not drag then
        -- Проверяем, находится ли курсор мыши в пределах заданной области
        if clientmouseposition(mouse_x, mouse_y, 954, 690, 270, 139) then
            drag = true  -- Начинаем перетаскивание
            offsetX = mouse_x - x  -- Вычисляем смещение по X
            offsetY = mouse_y - y  -- Вычисляем смещение по Y
        end
    else
        -- Если перетаскивание активно, обновляем координаты объекта
        x = mouse_x - offsetX
        y = mouse_y - offsetY
        ui.set(Zx, x)  -- Обновляем позицию объекта по X
        ui.set(Zy, y)  -- Обновляем позицию объекта по Y
    end
else
    drag = false  -- Если кнопка мыши отпущена, прекращаем перетаскивание
end
Хм, спасибо попробую.
 
а на кой хуй ты в ui.mouse_position() передаешь что-то, если оно только возвращает тебе 2 значения?


ui.mouse_position(): number, number
Returns current mouse coordinates x, y


upd: когда буду дома и посплю скину пофикшеную шляпу
 
вот код на определение того в зоне квадрата ли курсор. таким образом можно ограничть область действия, самое главное не забыть обновить позицию в глобале после перетаскивания, а то у тебя будет чисто в одном месте перетаскивыатся а там где нарисовано нет
code_language.lua:
Expand Collapse Copy
--curs = {x, y} = ui.mouse_position()
--coord = {x, y} это координаты квадратика
--size = {x, y} это размер квадрата
utils.in_range_rect = function(curs, coord, size)
    return curs.x > coord.x and curs.x < coord.x + size.x and curs.y > coord.y and curs.y < coord.y + size.y
end
советую так же добавить проверку на ферстклик, это поможет избежать неприятного явления когда ты перетаскивая один объект задеваешь другой и он тоже начинает двигатся

Код:
Expand Collapse Copy
--оборачиваешь в калбек, главное что бы переменные были в глоабльном скоупе
oldclicked = clicked
clicked = client.key_state(0x01)
firstclick = not oldclicked and clicked
 
Последнее редактирование:
вот код на определение того в зоне квадрата ли курсор. таким образом можно ограничть область действия, самое главное не забыть обновить позицию в глобале после перетаскивания, а то у тебя будет чисто в одном месте перетаскивыатся а там где нарисовано нет
code_language.lua:
Expand Collapse Copy
--curs = {x, y} = ui.mouse_position()
--coord = {x, y} это координаты квадратика
--size = {x, y} это размер квадрата
utils.in_range_rect = function(curs, coord, size)
    return curs.x > coord.x and curs.x < coord.x + size.x and curs.y > coord.y and curs.y < coord.y + size.y
end
советую так же добавить проверку на ферстклик, это поможет избежать неприятного явления когда ты перетаскивая один объект задеваешь другой и он тоже начинает двигатся

Код:
Expand Collapse Copy
--оборачиваешь в калбек, главное что бы переменные были в глоабльном скоупе
oldclicked = clicked
clicked = client.key_state(0x01)
firstclick = not oldclicked and clicked
Уже помогли сверху, но я учту ваше сообщение) спасибо!, я процессе изучения, данной эко системы.
 
Таааак, чуть разобравшись, я ее сделал, но..... мышка захватывает по всему экрану объект, помогите и в любом элементе меню оно хватается
JavaScript:
Expand Collapse Copy
local drag = false
local offsetX = 0
local offsetY = 0
local width = 0
if client.key_state(0x01) then
        local mouse_x, mouse_y = ui.mouse_position()
        if not drag then
            if ui.mouse_position(mouse_x, mouse_y, 954, 690, 270, 5, 139) then
                drag = true
                offsetX = mouse_x - x
                offsetY = mouse_y - y
            end
        else
            x = mouse_x - offsetX
            y = mouse_y - offsetY
            ui.set(Zx, x)
            ui.set(Zy, y)
        end
    else
        drag = false
    end
function clientmouseposition(mouse_x, mouse_y, rect_x, rect_y, rect_w, rect_h)
    return mouse_x >= rect_x and mouse_x <= rect_x + rect_w and mouse_y >= rect_y and mouse_y <= rect_y + rect_h
end
 
Назад
Сверху Снизу