Jump to content

[DUVIDA] Deixa dxDrawRectangle selecionado


Recommended Posts

  • Other Languages Moderators

Use GUI em vez de DX e seja feliz.

-----------------------

Tirando a zoeira, coloque os parâmetros do DX em variáveis e então você pode alterar essas propriedades da aparência do DX com uma função. E então você ativa essa função com onClientClick, verificando se a posição clicada está em cima do DX ou não.

Exemplo maneiro:

local sX, sY = guiGetScreenSize () -- Recebe a resolução do jogador.
showCursor (true) -- Mostra o cursor.
local parameters = {
	["superior"] = {100, 100, 100, 150}, -- Cores RGBA.
	["inferior"] = {0, 0, 0, 255},
	["esquerda"] = {100, 100, 100, 150},
	["direita"] = {0, 0, 0, 255},
	["texto"] = "OFF",
}

function renderDX ()
	dxDrawRectangle (sX/2 - 50, sY/2 - 20, 100, 40, tocolor (0, 0, 0, 150), true) -- Botão de Áudio
	dxDrawLine (sX/2 - 50, sY/2 - 20, sX/2 + 50, sY/2 - 20, tocolor (unpack (parameters["superior"])), 2, true) -- Linha superior
	dxDrawLine (sX/2 - 50, sY/2 + 20, sX/2 + 50, sY/2 + 20, tocolor (unpack (parameters["inferior"])), 2, true) -- Linha inferior
	dxDrawLine (sX/2 - 50, sY/2 - 20, sX/2 - 50, sY/2 + 20, tocolor (unpack (parameters["esquerda"])), 2, true) -- Linha esquerda
	dxDrawLine (sX/2 + 50, sY/2 - 20, sX/2 + 50, sY/2 + 20, tocolor (unpack (parameters["direita"])), 2, true) -- Linha direita
	dxDrawText (parameters["texto"], sX/2 - 50, sY/2 - 20, sX/2 + 50, sY/2 + 20, tocolor (255, 255, 255, 255), 2.0, 2.0, "default", "center", "center", false, false, true) -- Texto botão de áudio
	
	dxDrawRectangle (sX/2 - 50, sY/2 + 30, 100, 40, tocolor (0, 0, 0, 150), true) -- Botão de Play (eu não quis colocar bordas nesse por preguiça)
	dxDrawText ("PLAY", sX/2 - 50, sY/2 + 30, sX/2 + 50, sY/2 + 70, tocolor (255, 255, 255, 255), 2.0, 2.0, "default", "center", "center", false, false, true) -- Texto botão de play.
end
addEventHandler ("onClientRender", getRootElement(), renderDX)

function changeDX (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedWorld)
	if button ~= "left" then return end -- Se o botão do mouse clicado não for o esquerdo, então nada acontece.
	if state == "up" then -- Se o botão foi soltado, então:
		if (absoluteX >= sX/2 - 50) and (absoluteX <= sX/2 + 50) and (absoluteY >= sY/2 - 20) and (absoluteY <= sY/2 + 20) then -- Se a posição clicada está dentro do botão de áudio, então:
			if (parameters["texto"] == "OFF") then -- Se o texto do botão de áudio está como "OFF" então:
				parameters = {
					["superior"] = {0, 0, 0, 255}, -- Altera os valores, pra mudar a aparência do botão.
					["inferior"] = {100, 100, 100, 150},
					["esquerda"] = {0, 0, 0, 255},
					["direita"] = {100, 100, 100, 150},
					["texto"] = "ON", -- Muda o texto do botão de áudio pra "ON".
				}
			else -- Senão, se o botão de áudio está com outro texto que não seja "OFF", então:
				parameters = {
					["superior"] = {100, 100, 100, 150}, -- Volta ao normal.
					["inferior"] = {0, 0, 0, 255},
					["esquerda"] = {100, 100, 100, 150},
					["direita"] = {0, 0, 0, 255},
					["texto"] = "OFF", -- Muda o texto do botão de áudio pra "OFF".
				}
			end
		elseif (absoluteX >= sX/2 - 50) and (absoluteX <= sX/2 + 50) and (absoluteY >= sY/2 + 30) and (absoluteY <= sY/2 + 70) then -- Senão se a posição clicada está dentro do botão de play, então:
			if (parameters["texto"] == "ON") then -- Se o botão de áudio está habilitado, então:
				outputChatBox ("(Tocou a música.)")
			end -- Se o botão não está habilitado, então nada acontece.
		end
	end
end
addEventHandler ("onClientClick", getRootElement(), changeDX) -- Executa essa função quando o player clicar.

 

  • Thanks 1
  • Haha 2
Link to comment

Sinceramente acho que vou para o GUI ksksk o triste que é feio mas ne fazer o que.

Sobre o seu exemplo vi com calma para ver se dava para entende e algumas partes conseguir entende outras não.

Vou está explicando aqui de novo causo a primeira duvida fico meio dificil de entende, assim Vou está selecionando o dxDrawRectangle do Hamburguer ai para eu conseguir comer o Hamburguer eu teria que clicar em Comer/Beber em outro dxDrawRectangle.

Link to comment
  • Other Languages Moderators

Bom, se você não tem conhecimento suficiente para mexer com DX, é melhor ir pro GUI que é mais simples.
É como eu falei em outro tópico, o DX precisa ser todo feito na mão, enquanto que o GUI é só usar as funções prontas e mudar os parâmetros. O DX é mais complicado de entender.

Quais partes ali do código de exemplo vc não entendeu? Quem sabe se eu explicar melhor, você consiga usar em DX.

Edited by Lord Henry
  • Thanks 1
Link to comment

Ou então tu pode utilizar assim também, veja!

function Dx ()
local Item_Selecionado = getElementData ( localPlayer, "Item_Selecionado" ) or nil
local Item = getElementData ( localPlayer, "Item" )

		dxDrawRectangle(434, 263, 499, 290, CorItem, false)
		CorItem = tocolor(255, 255, 255, 255)
if Item_Selecionado == "Item" then		
		CorItem = tocolor(0, 255, 0, 90)			
end		

end

function Click ( _,state )
if state == "down" then
   if isCursorOnElement ( 434, 263, 499, 290 ) then 
       setElementData ( localPlayer, "Item_Selecionado", "Item" )
       playSoundFrontEnd ( 45 )
end
end
end
addEventHandler ( "onClientClick", root, Click )


local x,y = guiGetScreenSize()
function isCursorOnElement(x,y,w,h)
	local mx,my = getCursorPosition ()
	local fullx,fully = guiGetScreenSize()
	cursorx,cursory = mx*fullx,my*fully
	if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then
		return true
	else
		return false
	end
end

Não e nada profissional, Mas talvez possa te ajudar!

Link to comment

Seria melhor se você explicasse o que você quer fazer, então poderíamos te mostrar a melhor forma de fazer.

Tem GUI como já foi falado e é mais fácil de fazer em comparação ao DX, mas se você optar mesmo pelo DX, então estude os códigos que foi mostrado aqui (além disso tem outros aqui pelo fórum) e boa sorte.

Edited by DNL291
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...