Jump to content

Como usar escala para DX (Introdução rápida)


Recommended Posts

-- * Modo porcentagem * ...
-- simples metodo que usa um valor real para ser multiplicado por um valor entre 0 e 1, base para entender o calculo:
-- temos uma variavel x cujo valor é 500
-- x = 500, multiplicar x*0 = 0, ou x*1 = 500 e por fim x*0.5 = 250.
-- continuando .. calculos para escala

sX,sY = guiGetScreenSize() -- valor real em pixels x e y do monitor

function resX(value) -- (aspectRatio)
    return (value/1920)*sX -- calculo baseado na resolucao full hd
end

function resY(value) -- (aspectRatio)
    return (value/1080)*sY -- calculo baseado na resolucao full hd
end

-- calculo de escala do texto
fonts = {}
function dxFont(i)
    if not fonts[i] then
        fonts[i] = dxCreateFont("files/font/font.ttf",resX(index),false,"draft") or "default-bold" -- configure com a sua font
    end
    return fonts[i]
end

-- exemplos de como ser usado

dxDrawRectangle(sX*0.2,sY*0.2,resX(200),resY(200),tocolor(255,255,255,255))
dxDrawText("test text",sX*0.2,sY*0.2,sX*0.2+resX(200),sY*0.2+resY(200),tocolor(0,0,0,255),1,dxFont(16),"center","center",true)

-- * Calculo normal... + - /
-- maioria dos scripts que eu vejo sao assim para
-- calcular centro do monitor
-- sX/2 ou sY/2, ai acabam tipo fazendo o script naquele tamanho em todas as resolucoes..
-- eu tambem fiz um metodo para calcular isso  e fazer ele crescer comforme os tamanhos do sY

function fixRes(value)
    local min_ = math.floor(sY/500)
    local count = 1
    if min_ > 1 then
        count = count + 0.2*min_
    end
    return value*count
end

-- calculo de escala do texto
fonts = {}
function dxFont(i)
    if not fonts[i] then
        fonts[i] = dxCreateFont("files/font/font.ttf",fixRes(index),false,"draft") or "default-bold" -- configure com a sua font
    end
    return fonts[i]
end

-- exemplos

dxDrawRectangle(sX/2-fixRes(100),sY/2-fixRes(100),fixRes(200),fixRes(200),tocolor(255,255,255,255))
dxDrawText("test text",sX/2-fixRes(100),sY/2-fixRes(100),sX/2+fixRes(100),sY/2+fixRes(100),tocolor(0,0,0,255),1,dxFont(16),"center","center",true)

-- espero q tenham entendido como eu uso, fiquem avontade para melhorar o sistema e tambem dar dicas onde devo melhorar Vlw Galera!

 

  • Like 1
Link to comment
  • Moderators

Os comentários ajudam a entender o código, mas neste caso, acho que seria melhor você deixar toda explicação fora do código - até pra se adequar ao propósito que é um tutorial. Fora que os comentários dentro do código Lua perdem o destaque e não é o ideal pra alguém enxergar.

A propósito, vou falar o método que eu uso, que é mais simples, e ajusta o tamanho sem problemas:


-- res: 1280 x 800
local sx,sy = guiGetScreenSize()

local tamanho_da_fonte = 2.5
local X, Y = 450, 550

local dxWidth = (sx/1280) * (X + 150)
local dxHeight = (sy/800) * (Y + 40)

local dxScale = ((sx/1280) / (sy/800)) * tamanho_da_fonte
dxDrawText( "Teste", (sx/1280)*X, (sy/800)*Y, dxWidth, dxHeight, tocolor(255,255,255), dxScale, "default-bold", "left", "center" )

Eu defini essas variáveis pra deixar mais fácil de entender, mas recomendo poucas variáveis pra uma melhor performance do script sempre. Pra facilitar mais, você pode definir uma variável pra sx/1280 e sy/800 embaixo da função guiGetScreenSize.

  • Like 1
  • Thanks 1
Link to comment
  • 1 month later...
On 29/06/2017 at 00:45, DNL291 said:

Os comentários ajudam a entender o código, mas neste caso, acho que seria melhor você deixar toda explicação fora do código - até pra se adequar ao propósito que é um tutorial. Fora que os comentários dentro do código Lua perdem o destaque e não é o ideal pra alguém enxergar.

A propósito, vou falar o método que eu uso, que é mais simples, e ajusta o tamanho sem problemas:


-- res: 1280 x 800
local sx,sy = guiGetScreenSize()

local tamanho_da_fonte = 2.5
local X, Y = 450, 550

local dxWidth = (sx/1280) * (X + 150)
local dxHeight = (sy/800) * (Y + 40)

local dxScale = ((sx/1280) / (sy/800)) * tamanho_da_fonte
dxDrawText( "Teste", (sx/1280)*X, (sy/800)*Y, dxWidth, dxHeight, tocolor(255,255,255), dxScale, "default-bold", "left", "center" )

Eu defini essas variáveis pra deixar mais fácil de entender, mas recomendo poucas variáveis pra uma melhor performance do script sempre. Pra facilitar mais, você pode definir uma variável pra sx/1280 e sy/800 embaixo da função guiGetScreenSize.

Este é apenas para dxDrawText ?

Link to comment
  • 2 weeks later...
  • Moderators
On 06/08/2017 at 13:11, raynner said:

Este é apenas para dxDrawText ?

Funciona pra qualquer coisa (dxDrawRectangle/dxDrawImage). Se você quer manter a proporção da interface independente da resolução, esse método é útil.

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