Jump to content

Retangulos iguais com posições diferentes


Recommended Posts

Posted

eu queria criar varios retangulos iguais porém em lugares diferentes, creio eu que seja a mesma lógica de criar varios markers
porém não sei como farei as funções de mudar de cor ao passar o mouse em cada retangulo e as funções de quando clicka em cada retangulo

  • Moderators
Posted (edited)

Tipo assim:

local screen = Vector2(guiGetScreenSize()) -- Obtém a resolução do jogador.

retangulos = { -- posX, posY, tamanhoX, tamanhoY
    {screen.x/2 - 100, screen.y/2 - 100, 200, 20},
    {screen.x/2 - 100, screen.y/2 - 60, 200, 20},
    {screen.x/2 - 100, screen.y/2 - 20, 200, 20},
    {screen.x/2 - 100, screen.y/2 + 20, 200, 20},
    {screen.x/2 - 100, screen.y/2 + 60, 200, 20},
    {screen.x/2 - 100, screen.y/2 + 100, 200, 20},
}

function isMouseInPosition (x, y, width, height) -- Função útil.
    if (not isCursorShowing()) then
        return false
    end
    local sx, sy = guiGetScreenSize()
    local cx, cy = getCursorPosition()
    local cx, cy = (cx * sx), (cy * sy)
    
    return ((cx >= x and cx <= x + width) and (cy >= y and cy <= y + height))
end

function renderPanel() -- Renderiza o painel.
    local cx, cy = getCursorPosition()
    for _, infos in pairs(retangulos) do -- Para cada item da tabela retangulos, faça:
        local x, y, sizeX, sizeY = unpack(infos) -- Obtém cada valor desse item e separa numa variável.
        if isMouseInPosition (x, y, sizeX, sizeY) then -- Se o mouse está em cima deste retângulo, então:
            dxDrawRectangle (x, y, sizeX, sizeY, 0xFFFFFFFF, true) -- Retângulo selecionado branco.
        else
            dxDrawRectangle (x, y, sizeX, sizeY, 0xFF0000FF, true) -- Retângulo normal azul.
        end
    end
end

addCommandHandler("eae", function(cmd) -- Mostra/oculta o painel.
    showCursor(not isCursorShowing())
    if isCursorShowing() then
        addEventHandler("onClientRender", root, renderPanel)
    else
        removeEventHandler("onClientRender", root, renderPanel)
    end
end)

addEventHandler("onClientClick", root, function(button, state) -- Função que mostra qual botão foi clicado.
    if button == "left" and state == "down" then
        for i, infos in pairs(retangulos) do
            local x, y, sizeX, sizeY = unpack(infos)
            if isMouseInPosition (x, y, sizeX, sizeY) then
                outputChatBox("Você clicou no botão "..i)
                break -- Não precisa verificar os demais botões, pois já achou o que foi clicado.
            end
        end
    end
end)

 

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

no caso ali do onclientclick, como eu faço para identificar qual retangulo é qual, porque cada um executará uma função diferente
poderia dar um exemplo com 2 retangulos executando 2 funções diferentes?

  • Moderators
Posted (edited)

Ali o i do for é o índice do retângulo.

Se você quer que ao clicar no primeiro retângulo da tabela faça tal coisa, você coloca isso:

if i == 1 then
    -- Code
end

Depois elseif i == 2 then pro segundo retângulo.

E assim por diante nos próximos retângulos.

Edited by Lord Henry

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.

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

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