Jump to content

Не скрывается GUI


Recommended Posts

Вечер добрый, столкнулся с тем, что иногда после нажатия кнопки закрытия не исчезает GUI. Мышка скрывается а интерфейс остается. Юзаю вот такой костыль:

function atmGUI()
atmGUIMain = guiCreateStaticImage(0, 0, screenx, screeny, "atm.png", false)

exitGUIbtn = guiCreateStaticImage(screenx/1.1955, screeny/1.367, screenx/20.5, screeny/17, "button.png", false, atmGUIMain)
showCursor(true)
end
addEvent("drawATMgui", true)
addEventHandler("drawATMgui", localPlayer,atmGUI)

addEventHandler("onClientGUIClick", getRootElement(), function()
if(source == exitGUIbtn) then
guiSetVisible(atmGUIMain, false)
destroyElement(atmGUIMain)
showCursor(false)
end
end
)

В основном всё работает как надо, но иногда бывают траблы с закрытием. Подскажите пожалуйста как исправить этот косяк.

Link to comment

Пока что решил таким костылем:

function checkGUIcall()
local var = getElementData(getLocalPlayer(), "PRP_atmuse")
if(var == "available") then
    atmGUI()
end
end
bindKey ( "E", "down", checkGUIcall )

Вопрос только насколько сильно ElementData будет грузить сервер?

Link to comment

Если ElementData только локально на клиенте, то это не окажет никакого влияния на сервер. Если ElementData используется для синхронизации между клиентом и сервером, то здесь есть два фактора, влияющих на производительность:

  • Частота изменения ElementData. Чем чаще вызывается setElementData, тем хуже.
  • Длина имени ElementData и объем синхронизируемых данных. Чем длина имени больше и чем объем данных больше, тем хуже.
Link to comment

 


atmGUIMain = guiCreateStaticImage(0, 0, screenx, screeny, "atm.png", false)
guiSetVisible(atmGUIMain, false)
exitGUIbtn = guiCreateStaticImage(screenx/1.1955, screeny/1.367, screenx/20.5, screeny/17, "button.png", false, atmGUIMain)

function open()
  if(guiGetVisible(atmGUIMain) == false) then
    guiSetVisible(atmGUIMain, true)
    showCursor(true)
    else
    guiSetVisible(atmGUIMain, false)
    showCursor(false)
    end
  end
bindKey("your key","down",open)

addEventHandler("onClientGUIClick", getRootElement(), function()
if(source == exitGUIbtn) then
guiSetVisible(atmGUIMain, false)
showCursor(false)
end
end
)

 

  • Like 1
Link to comment
  • 2 weeks later...

А ещё лучше не говнокодить с "if" и "elseif" там где этого не надо, и не вешать событие на root.

local atmGUIMain = guiCreateStaticImage(0, 0, screenx, screeny, "atm.png", false);
local exitGUIbtn = guiCreateStaticImage(screenx/1.1955, screeny/1.367, screenx/20.5, screeny/17, "button.png", false, atmGUIMain);

guiSetVisible(atmGUIMain, false);

bindKey("your key", "down", 
	function()
		local newVisibleState = not guiGetVisible(atmGUIMain);
		
		guiSetVisible(atmGUIMain, newVisibleState);
		showCursor(newVisibleState);
	end);

addEventHandler("onClientGUIClick", exitGUIbtn, false,
	function()
		guiSetVisible(source, false);
		showCursor(false);
	end);

 

Link to comment

Автор был близок к истине с оптимизированным кодом. Убрал ненужную функцию и добавил проверку на мышь, дабы не было потом дополнительных проблем.

Моя версия:

function atmGUI()
	atmGUIMain = guiCreateStaticImage(0, 0, screenx, screeny, "atm.png", false)
	exitGUIbtn = guiCreateStaticImage(screenx/1.1955, screeny/1.367, screenx/20.5, screeny/17, "button.png", false, atmGUIMain)
	showCursor(true)
end
addEvent("drawATMgui", true)
addEventHandler("drawATMgui", localPlayer,atmGUI)

addEventHandler("onClientGUIClick", getRootElement(), function(bt, st)
    if bt == "left" and st == "up" then -- проверка на кнопку
		if source == exitGUIbtn then
			destroyElement(atmGUIMain)
			showCursor(false)
		end
	end
)

 

  • Like 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...