Jump to content

Adequar painel DX para qualquer resolução


Recommended Posts

então na minha resolução fica normal, mas a resolução do meu amigo é diferente e ele disse que as letras saem para fora do painel poderiam me ajudar?
 

local screenW, screenH = guiGetScreenSize()

function DX_Entregas()
    dxDrawRectangle(screenW * 0.3794, screenH * 0.2467, screenW * 0.2288, screenH * 0.4833, tocolor(31, 31, 31, 255), false)
    dxDrawRectangle(screenW * 0.3794, screenH * 0.2356, screenW * 0.2288, screenH * 0.0111, tocolor(116, 0, 165, 255), false)
    dxDrawRoundedRectangle(screenW * 0.3956, screenH * 0.2711, screenW * 0.1969, screenH * 0.3333, 15, tocolor(82, 82, 82, 224), false)
    dxDrawRoundedRectangle(screenW * 0.4019, screenH * 0.6444, screenW * 0.0769, screenH * 0.0533, 15, tocolor(82, 82, 82, 224), false)
    dxDrawRoundedRectangle(screenW * 0.5094, screenH * 0.6444, screenW * 0.0769, screenH * 0.0533, 15, tocolor(82, 82, 82, 224), false)
    dxDrawText("SIM", screenW * 0.4200, screenH * 0.6489, screenW * 0.4788, screenH * 0.6778, tocolor(25, 232, 4, 255), 3.00, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("NÃO", screenW * 0.5240, screenH * 0.6489, screenW * 0.5837, screenH * 0.6778, tocolor(237, 0, 0, 255), 3.00, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("Você Quer Trabalhar Entregando Drogas?", screenW * 0.4200, screenH * 0.2822, screenW * 0.6019, screenH * 0.3122, tocolor(255, 255, 255, 255), 1.1, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("--Receber uma Van no Local ao Lado", screenW * 0.4044, screenH * 0.3267, screenW * 0.5863, screenH * 0.3567, tocolor(255, 255, 255, 255), 1.1, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("--Entregar a Carga em um Local Secreto", screenW * 0.4044, screenH * 0.3567, screenW * 0.5863, screenH * 0.3867, tocolor(255, 255, 255, 255), 1.1, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("--Receber de R$8000 a R$9000 de Dinheiro Sujo", screenW * 0.4044, screenH * 0.4167, screenW * 0.5863, screenH * 0.4211, tocolor(255, 255, 255, 255), 1.1, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("--Caso Saia da Van Perderá a Carga", screenW * 0.4044, screenH * 0.4467, screenW * 0.5863, screenH * 0.4211, tocolor(255, 255, 255, 255), 1.1, "default-bold", "left", "top", false, false, false, false, false)
    dxDrawText("--Caso a Van Quebre Perderá a Carga", screenW * 0.4044, screenH * 0.4767, screenW * 0.5863, screenH * 0.4211, tocolor(255, 255, 255, 255), 1.1, "default-bold", "left", "top", false, false, false, false, false)
end

 

Edited by Lord Henry
Link to comment
  • Other Languages Moderators

Textos não acompanham resolução da tela. Você terá que alterar a escala da fonte de acordo com o tamanho da tela do jogador.

É por esse motivo que eu prefiro fazer com tamanho fixo, pois os textos não são responsivos.

Além disso, dependendo da resolução do jogador, a proporção da tela também mudará. (por padrão é 16:9, mas algumas resoluções mais baixas podem chegar até a 4:3)

Link to comment
  • Other Languages Moderators

A resolução segura mais baixa do MTA é 640x480. Então eu prefiro fazer os painéis com no máximo esse tamanho e deixar fixo.

Ou vc faz tamanho fixo ou você cria condições que verificam o tamanho da tela do jogador e seta uma escala diferente nas fontes.

Você também pode criar uma tabela com todas as resoluções padrão do MTA e setar uma escala de fonte diferente em cada uma delas. Obviamente isso dará trabalho pois você precisará testar todas as opções de resolução no seu script.

Link to comment
  • Other Languages Moderators

Outro problema é que em resoluções baixas demais, seu texto se tornará ilegível se usar escala menor.

640x480

image.png

1920x1080

image.png

Os botões de sim e não também bugarão pois são menores do que o raio dos cantos.

Link to comment
  • Other Languages Moderators
Spoiler
local screenW, screenH = guiGetScreenSize()
local states = false

function DX_Entregas()
    dxDrawRectangle((screenW/2) - 220, (screenH/2) - 220, 440, 460, tocolor(31, 31, 31, 255), true)
    dxDrawRectangle((screenW/2) - 220, (screenH/2) - 240, 440, 20, tocolor(116, 0, 165, 255), true)
    dxDrawRoundedRectangle((screenW/2) - 200, (screenH/2) - 220, 400, 360, 15, tocolor(82, 82, 82, 224), true)
    dxDrawRoundedRectangle((screenW/2) - 200, (screenH/2) + 160, 150, 60, 15, tocolor(82, 82, 82, 224), true)
    dxDrawRoundedRectangle((screenW/2) + 50, (screenH/2) + 160, 150, 60, 15, tocolor(82, 82, 82, 224), true)
    dxDrawText("SIM", (screenW/2) - 200, (screenH/2) + 160, (screenW/2) - 50, (screenH/2) + 220, tocolor(25, 232, 4, 255), 3, "default-bold", "center", "center", true, true, true)
    dxDrawText("NÃO", (screenW/2) + 50, (screenH/2) + 160, (screenW/2) + 200, (screenH/2) + 220, tocolor(237, 0, 0, 255), 3, "default-bold", "center", "center", true, true, true)
    dxDrawText("Você quer trabalhar entregando drogas?", (screenW/2) - 200, (screenH/2) - 240, (screenW/2) + 200, (screenH/2) - 220, tocolor(255, 255, 255, 255), 1, "default-bold", "center", "center", true, true, true)
    dxDrawText("-- Receber uma van no local ao lado\n\n-- Entregar a carga em um local secreto\n\n-- Receber de 10000 a 13000 de Dinheiro Sujo", (screenW/2) - 190, (screenH/2) - 210, (screenW/2) + 190, (screenH/2) + 130, tocolor(255, 255, 255, 255), 1, "default-bold", "left", "top", true, true, true)
end

addEvent("Open:Ilegal", true)
addEventHandler("Open:Ilegal", root, function()
    if states then
        removeEventHandler("onClientRender", root, DX_Entregas)
    else
        addEventHandler("onClientRender", root, DX_Entregas)
    end
    states = not states
    showCursor(states)
end)

bindKey("backspace", "down", function(key, keyState)
    if states and isCursorShowing() then
        removeEventHandler("onClientRender", root, DX_Entregas)
        showCursor(false)
        states = not states
    end
end)

addEventHandler("onClientClick", root, function(button, state)
    if states then
        if (button == "left" and state == "down") then
            if isMouseInPosition((screenW/2) - 200, (screenH/2) + 160, 150, 60) then -- SIM
                if not getElementData(localPlayer, "EntregadorD") then
                    setElementData(localPlayer, "EntregadorD", true)
                    -- exports._infobox:addNotification("Você Agora Trabalha na Entrega Ilegal!", "info")
                    print("Você Agora Trabalha na Entrega Ilegal!")
                    removeEventHandler("onClientRender", root, DX_Entregas)
                    showCursor(false)
                    states = false
                end
            elseif isMouseInPosition((screenW/2) + 50, (screenH/2) + 160, 150, 60) then -- NÃO
                if getElementData(localPlayer, "EntregadorD") then
                    -- exports._infobox:addNotification("Você Saiu do Emprego de Entregas Ilegais!", "info")
                    print("Você Saiu do Emprego de Entregas Ilegais!")
                    setElementData(localPlayer, "EntregadorD", false)
                end
                removeEventHandler("onClientRender", root, DX_Entregas)
                showCursor(false)
                states = false
            end
        end
    end
end)

function isMouseInPosition (x, y, width, height)
	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 dxDrawRoundedRectangle(x, y, rx, ry, radius, color, postGUI)
    rx = rx - radius * 2
    ry = ry - radius * 2
    x = x + radius
    y = y + radius
    
    if (rx >= 0) and (ry >= 0) then
        dxDrawRectangle(x, y, rx, ry, color, postGUI)
        dxDrawRectangle(x, y - radius, rx, radius, color, postGUI)
        dxDrawRectangle(x, y + ry, rx, radius, color, postGUI)
        dxDrawRectangle(x - radius, y, radius, ry, color, postGUI)
        dxDrawRectangle(x + rx, y, radius, ry, color, postGUI)
        
        dxDrawCircle(x, y, radius, 180, 270, color, color, 7, 1, postGUI)
        dxDrawCircle(x + rx, y, radius, 270, 360, color, color, 7, 1, postGUI)
        dxDrawCircle(x + rx, y + ry, radius, 0, 90, color, color, 7, 1, postGUI)
        dxDrawCircle(x, y + ry, radius, 90, 180, color, color, 7, 1, postGUI)
    end
end

 

Fiz um painel fixo para você. Vai funcionar em todas as resoluções sem distorcer. A posição dele é responsiva no centro da tela, mas o tamanho é fixo.

640x480

Spoiler

image.png.47de5efa438e50a10cf13287a6092d82.png

1920x1080

Spoiler

image.thumb.png.3fe5c2fcdbe5430edcc95d39ec8d93d4.png

 

Link to comment
  • Other Languages Moderators

É uma função que ajuda no desenvolvimento, faz com que você habilite o modo desenvolvedor.

Você consegue ativá-la usando setDevelopmentMode (true) só funciona client-side. Também dá pra você ativá-la no painel Admin, na aba Resources. Digite ali no campo de comando e clique em Client.

Eu fiz meu painel de login ativar essa função automaticamente quando eu faço login. Para evitar o empenho de ir ali no painel Admin ativar o modo desenvolvedor toda vez q preciso dos comandos especiais.

Depois que ela está ativada, você passa a ter acesso a esses 2 comandos especiais.

  • /showcol - Mostra/oculta os colshapes só para você. (aqueles criados com createColCuboid, createColSphere, etc)
  • /showsound - Mostra/para de mostrar os IDs dos sons do cenário no seu Debug Console. Precisa estar com /debugscript ativo para ver o Debug Console.
Spoiler

Showcol ativado.

mta-screen_2023-03-02_17-45-17.thumb.png.59676bf05db272127a33d0af5e7b361c.png

Showsound ativado.

mta-screen_2023-03-02_17-56-08.png.a29af2d831ff284f58f35dcfbe1e134e.png

 

  • Like 1
Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

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