Jump to content

[DUVIDA] Deixa dxDrawRectangle selecionado


Recommended Posts

Posted

Olá gostaria de sabe como faço para deixar um dxDrawRectangle ai quando ele tiver selecionado eu aperta em outro dxDrawRectangle e fazer uma função exemplo: Um som.

Obs: Da parte de fazer uma função eu ja tenho função determinada.

  • Moderators
Posted

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

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted

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.

  • Moderators
Posted (edited)

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

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted

Realmente o Dx é um pouco chato mas assim o painel do inventario ta todo feito já o estaria faltando era Comer/Beber, mas vou fazer de clicar mesmo.
Obrigado pela ajuda.

Posted

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!

Meu comentário foi útil? Deixe um Thanks :D

Posted (edited)

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

Please do not PM me with scripting related question nor support, use the forums instead.

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...