xYaroslavGTx

Не скрывается 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
)

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

Share this post


Link to post

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

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

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

Share this post


Link to post

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

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

Share this post


Link to post

 


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

Share this post


Link to post

А ещё лучше не говнокодить с "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);

 

Share this post


Link to post

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

Моя версия:

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

Share this post


Link to post

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.