Jump to content

Renderização de informações com elementos GUI


Recommended Posts

Olá, sou iniciante em Lua, e estou treinando com alguns scripts, e esse tem me dado uma certo trabalho!! 
Bom, basicamente e um painel simples com algumas informações sobre o veiculo como Velocidade, RPM, e etc.. Porem, as informações não atualização, já fiz algumas coisas com DX e tudo funcionou perfeitamente usando o onClientRendertodas as informações atualizavam sem aparecer algum tipo de erro no DebugScript, foi se passando o tempo e enjoei do DX e resolvi usar o GUI, mas quando tentei usar o onClientRender simplesmente ficou recriando os elementos sem parar ao invés de apenas atualizar as informações, tendo que desativar o script pelo console pois já não dava mais para mexer o mouse dentro do jogo de tão pesado que ficava, por ter tantos e tantos elementos criados ali!

function Dashboard()
guiSetVisible( MainWindow, true)


		veh = getPedOccupiedVehicle (getLocalPlayer ( ))
		speedx, speedy, speedz = getElementVelocity (veh)
		actualspeed = (speedx^2 + speedy^2 + speedz^2)^(0.5)
		mps = math.floor(actualspeed * 50)
		kmh = math.floor(actualspeed * 180)
		mph = math.floor(actualspeed * 111.847)
		curGear = getVehicleCurrentGear(veh)


	local screenWidth, screenHeight = guiGetScreenSize()
	local windowWidth, windowHeight = 300, 215
	local left = screenWidth - windowWidth - 20
	local top = screenHeight/2 - windowHeight/2
	MainWindow = guiCreateWindow(left, top, windowWidth, windowHeight, "Dashboard", false)
	guiWindowSetSizable(MainWindow, false)
	-------------------------
	kmhlabel = guiCreateLabel(10, 25, 61, 21, kmh.." Km/h", false, MainWindow)
	guiLabelSetHorizontalAlign(kmhlabel, "center", false)
	guiLabelSetVerticalAlign(kmhlabel, "center")
	
	kmhprogress =  guiCreateProgressBar(80, 25, 201, 21, false, MainWindow)
	guiProgressBarSetProgress(kmhprogress, kmh)
	-------------------------
	gasprogress =  guiCreateProgressBar(80, 185, 201, 21, false, MainWindow)
	guiProgressBarSetProgress(gasprogress, 40)
	
	gaslabel = guiCreateLabel(10, 185, 61, 21, "GAS", false, MainWindow)
	guiLabelSetHorizontalAlign(gaslabel, "center", false)
	guiLabelSetVerticalAlign(gaslabel, "center")
	-------------------------
	waterlabel = guiCreateLabel(10, 145, 61, 21, "WATER", false, MainWindow)
	guiLabelSetHorizontalAlign(waterlabel, "center", false)
	guiLabelSetVerticalAlign(waterlabel, "center")
	
	waterprogress =  guiCreateProgressBar(80, 145, 201, 21, false, MainWindow)
	guiProgressBarSetProgress(waterprogress, 40)
	-------------------------	
	templabel = guiCreateLabel(10, 105, 61, 21, "TEMP", false, MainWindow)
	guiLabelSetHorizontalAlign(templabel, "center", false)
	guiLabelSetVerticalAlign(templabel, "center")
	
	tempprogress =  guiCreateProgressBar(80, 105, 201, 21, false, MainWindow)
	guiProgressBarSetProgress(tempprogress, 40)
	-------------------------	
	rpmlabel = guiCreateLabel(10, 65, 61, 21, "RPM", false, MainWindow)
	guiLabelSetHorizontalAlign(rpmlabel, "center", false)
	guiLabelSetVerticalAlign(rpmlabel, "center")
	
	rpmprogess =  guiCreateProgressBar(80, 65, 201, 21, false, MainWindow)
	guiProgressBarSetProgress(rpmprogess, 40)
end

addEventHandler("onClientVehicleEnter", root, Dashboard)

function NaoRenderizar ()
	guiSetVisible( MainWindow, false)
end
addEventHandler("onClientVehicleExit", root, NaoRenderizar)

Basicamente este e o código, por favor, não quero que alguém refaça um código e simplesmente o post aqui, eu quero aprender.. Então se for possível kkkk
Desde já, muito obrigado! :D

Link to comment
  • Other Languages Moderators

Também optei por trabalhar com GUI, só algumas coisas que faço em DX.

Enfim, vamos ao tópico. Primeiro, jamais crie um evento de renderização em painéis GUI, eles realmente irão recriar até você desligar.

Para atualizar as informações, você irá sim precisar de um evento de renderização, porém apenas para alterar os textos, usando guiSetText. Assim como o progressBar e outros elementos que precisam serem atualizados de acordo com a velocidade do carro, que no caso é o que seu script faz.

Então, dentro do evento onClientRender, você deverá atualizar as informações. Exemplo:

function updateInfo ( )
	
	veh = getPedOccupiedVehicle ( getLocalPlayer ( ) );
	speedx, speedy, speedz = getElementVelocity ( veh );
	actualspeed = ( speedx ^ 2 + speedy ^ 2 + speedz ^ 2 ) ^ ( 0.5 );
	mps = math.floor ( actualspeed * 50 );
	kmh = math.floor ( actualspeed * 180 );
	mph = math.floor ( actualspeed * 111.847 );
	curGear = getVehicleCurrentGear ( veh );
	
	guiSetText ( kmhlabel, kmh .. " Km/h" );
	
end
addEventHandler ( "onClientRender", root, updateInfo )

Lembre-se de ativar o evento de renderização apenas quando o jogador entrar no veículo, igual você fez no código.

Edited by asrzk
  • Thanks 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...