imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
С имгуи я обошел этот баг через хитровыебаную систему костылей. А вот с диалогами нет. Если решения не будет, то придецца перерисовывать диалог заново после разворота игры. Но блять.Если у тебя так:Тогда убери resX и resY и замени их на координаты экрана ( или че там )Lua:imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
Ну насчет диалогов хз, еще никогда не видел фикса данной проблемыС имгуи я обошел этот баг. А вот с диалогами нет. Если решения не будет, то придецца перерисовывать диалог заново после разворота игры. Но блять.
суть как то в том, что самп думает, что когда окно свернуто то оно имеет другое разрешение. Возможно 0х0 или 32х32 не суть. И оно кидает элементы не туда куда надо, так как кидает их по центру. Как я и говорил с имгуи я порешал костылями, но это только для своих скриптов. А надо бы решить это более адекватно, чтобы елементы всегда правильно появлялись исходя из разрешения игры. Отмечу, что мунлодер при свернутой игре выдает правильное разрешение getScreenResolution()Да встречался с таким багом, именно с диалогом. Обычно когда окно появляется в тот момент, когда игра свёрнута. Если окно было открыто до сворачивания, то такого трабла нет.
Вот с imgui такая херь похуже, тут уже улетает в угла в любом случае, если включено анти-афк и сворачиваешь.
К данному вопросу не приступал, но планирую. Думаю можно заюзать функцию с C++ через ffi либу, которая будет проверять на свёрнутость окна или же попробовать заюзать события windows, если получится.
Вот на счёт диалога может тоже как-то обработать по двух последним упомянутых способах через raknet событие или хук по функции.
Если не секрет, как ты с imgui решил трабл этот, поставил на проверку активности окна игры?
imgui = require "imgui"
imw_menu = imgui.ImBool(false)
pos_menu = nil -- переменная с координатами окна
function imgui.OnDrawFrame()
local w, h = getScreenResolution()
if imw_menu.v then
imgui.SetNextWindowSize(imgui.ImVec2(800, 600), imgui.Cond.Always)
---------------------Позиция окна----------------------------------------
if pos_menu then -- Если пользователь перемещал уже окно хоть раз
if imgui.IsMouseDown(0) then -- Если левая мышка нажата, то окно можно перетаскивать
imgui.SetNextWindowPos(imgui.ImVec2(pos_menu.x, pos_menu.y), imgui.Cond.FirstUseEver)
else -- Если не нажата левая мышка, то окно перетаскивать нельзя и никуда оно не улетит.
imgui.SetNextWindowPos(imgui.ImVec2(pos_menu.x, pos_menu.y), imgui.Cond.Always)
end
else -- Если пользователь не перемещал окно еще ниразу
imgui.SetNextWindowPos(imgui.ImVec2(w/2, h/2), imgui.Cond.Always, imgui.ImVec2(0.5, 0.5)) -- ставлю окно по центру (по дефолту, до тех пор пока пользователь не передвинет его, и новые координаты будут записаны в переменную pos_menu)
end
------------------------------ Окно -------------------------------------
imgui.Begin("Menu ##imw_menu", imw_menu, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
-- << Тут твой код интерфейса
----------------------- запись позиции окна ------------------------
if imgui.IsRootWindowOrAnyChildHovered() then
if imgui.IsMouseDown(0) then -- Если левая кнопка мышки нажата на окне, то начать записывать новые координаты окна
local window_pos = imgui.GetWindowPos()
if (not pos_menu) or (pos_menu.x ~= window_pos.x) or (pos_menu.y ~= window_pos.y) then
pos_menu = {x = window_pos.x, y = window_pos.y}
end
end
end
imgui.End()
end
end
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then
return
end
while not isSampAvailable() do
wait(0)
end
---
imgui.Process = true -- я так делаю и никогда не выключаю Process, решает кое какие проблемы
sampRegisterChatCommand("test", function() imw_menu.v = not imw_menu.v end)
---
while true do
wait(0)
if imw_menu.v then
imgui.ShowCursor = true
else
imgui.ShowCursor = false
end
end
end