Jump to content

Obter Resolução Dos Jogadores [ GUI ]


Recommended Posts

Olá pessoal, boa noite, bom eu gostaria saber se tem alguma forma de identificar a resolução dos jogadores e aplicar na label, ou seja, ajustar de acordo com a resolução do player, fiz uma label de exemplo aqui:

Código:

addEventHandler( "onClientResourceStart", resourceRoot,
    function()
        label1 = guiCreateLabel(105, 696, 211, 19, "Teste 1", false)
        guiSetFont(label1, "default-bold-small")
		--
        label2 = guiCreateLabel(81, 677, 211, 19, "Teste 2", false)
        guiSetFont(label2, "default-bold-small")    
    end
)

Fiz essa label na resolução 1280x720, queria ajustar para todas as resoluções, tem pessoas que usam 800x600 então isso fica desproporcional.

Edited by OverKILL
Link to comment
26 minutes ago, danilin said:

eu acho que a gui é ajustada da mesma forma da dx... eu costumo usar x*, y*, x*, y*

Não, desta forma não funciona. 

Desta forma da apenas para ajustar em uma resolução, não sei se da pra identificar com essa mesma função a resolução que o jogador esta usando.

Ex:

local x, y = (screenH/1366), (screenW/768)
local screenH, screenW = guiGetScreenSize()

addEventHandler( "onClientResourceStart", resourceRoot,
    function()
        label1 = guiCreateLabel(x*105, y*696, x*211, y*19, "Teste 1", false)
        guiSetFont(label1, "default-bold-small")
		--
        label2 = guiCreateLabel(x*81, y*677, x*211, y*19, "Teste 2", false)
        guiSetFont(label2, "default-bold-small")    
    end
)

 

o que quero fazer é identificar a resolução do jogador e ajustar.

Edited by OverKILL
Link to comment
  • Other Languages Moderators

Cara, esse negócio de ajustar escala de acordo com a resolução sempre vai bugar. Pois tem resoluções que o Aspect Ratio é 4:3 (800 x 600) e outras que são 16:9 (Padrão Full HD). Prefira fazer os painéis sempre com o mesmo tamanho e ir apenas setando a posição da janela no meio da tela usando a função útil centerWindow.

function centerWindow (center_window)
	local screenW, screenH = guiGetScreenSize()
	local windowW, windowH = guiGetSize(center_window, false)
	local x, y = (screenW - windowW) /2,(screenH - windowH) /2
	return guiSetPosition(center_window, x, y, false)
end

addEventHandler ("onClientResourceStart", getResourceRootElement(getThisResource()), function()
	theWindow = guiCreateWindow (0, 0, 300, 300, "Janela Qualquer", false)
	centerWindow (theWindow)
	guiWindowSetSizable (theWindow, false)
	label1 = guiCreateLabel(10, 20, 45, 20, "Teste 1", false, theWindow)
	label1 = guiCreateLabel(10, 40, 45, 20, "Teste 2", false, theWindow)
end)

Os elementos de texto GUI como os Labels, não possuem escala relativa. O parâmetro relative dele só serve para posição e tamanho do canvas dele. Mas o tamanho da fonte não muda a não ser que use guiCreateFont.

 

Janela teste na resolução nativa de 1366 x 768:

Spoiler

C9xtSBlBTECg4CHNvlJ7Fw.png

Janela teste na resolução de 800 x 600:

Spoiler

UyjkFZPNQkOckN1a8KsXMA.png

 

Edited by Lord Henry
  • Thanks 1
Link to comment
23 minutes ago, Lord Henry said:

Cara, esse negócio de ajustar escala de acordo com a resolução sempre vai bugar. Pois tem resoluções que o Aspect Ratio é 4:3 (800 x 600) e outras que são 16:9 (Padrão Full HD). Prefira fazer os painéis sempre com o mesmo tamanho e ir apenas setando a posição da janela no meio da tela usando a função útil centerWindow.


function centerWindow (center_window)
	local screenW, screenH = guiGetScreenSize()
	local windowW, windowH = guiGetSize(center_window, false)
	local x, y = (screenW - windowW) /2,(screenH - windowH) /2
	return guiSetPosition(center_window, x, y, false)
end

addEventHandler ("onClientResourceStart", getResourceRootElement(getThisResource()), function()
	theWindow = guiCreateWindow (0, 0, 300, 300, "Janela Qualquer", false)
	centerWindow (theWindow)
	guiWindowSetSizable (theWindow, false)
	label1 = guiCreateLabel(10, 20, 45, 20, "Teste 1", false, theWindow)
	label1 = guiCreateLabel(10, 40, 45, 20, "Teste 2", false, theWindow)
end)

Os elementos de texto GUI como os Labels, não possuem escala relativa. O parâmetro relative dele só serve para posição e tamanho do canvas dele. Mas o tamanho da fonte não muda a não ser que use guiCreateFont.

 

Janela teste na resolução nativa de 1366 x 768:

  Hide contents

C9xtSBlBTECg4CHNvlJ7Fw.png

Janela teste na resolução de 800 x 600:

  Hide contents

UyjkFZPNQkOckN1a8KsXMA.png

 

Vlw lord, eu imaginava que não iria funcionar direito, eu não sabia dessa função de centralizar no meio da tela vai ser muito útil pra mim.

Link to comment

fiz esse codigo como exemplo de base, nao quer dizer que ele deve ser seguido:

local sX,sY = guiGetScreenSize()
local min_Y = math.floor(sY/480)
local min_X = math.floor(sX/640)
if min_Y <= min_X then
	g_Scale = min_Y
else
	g_Scale = min_X
end
local g_Scale = 1 + 0.2*g_Scale
function resX(value)
    return (value*g_Scale)
end
function resY(value)
    return (value*g_Scale)
end
local _dxDrawRectangle = dxDrawRectangle
function dxDrawRectangle(x,y,w,h,tocolor,postGui)
	return _dxDrawRectangle(x,y,resX(w),resY(h),tocolor,postGui)
end
addEventHandler("onClientRender",root,
	function()
		dxDrawRectangle(sX/2-resX(350),sY/2-resY(250),700,500,tocolor(255,255,255,200),false)
	end
)

pense o seguinte o normal do mta é manter a os tamanho para todos os monitores exemplo :

 dxDrawRectangle(100,100,200,200,tocolor(255,255,255,255),false)

sempre manter tudo a x=100,y=100 e assim vai sempre ter os mesmos valores de pixels,  mas chegamos ao ponto que agora no inicio voce esta usando uma resolução de 640 px no eixo X, usar 200 px é um bom tamanho, mas se voce usar 200px em um monitor de 1080 px é um retangulo minusculo, e assim chegamos onde eu quero chegar que é a ideia da ESCALA.

onde eu PARTICULARMENTE só vejo duas maneira de se fazer com eficacia, um metodo que é por porcentagem exemplo:( que eu nao gosto muito, porque tira a proporção entre as coisas, vc tambem perde qualidade em imagens, etc..)

local sX,sY = guiGetScreenSize()
dxDrawRectangle(sX*0.2,sY*0.2,sX*0.4,sY*0.6,tocolor(255,255,255,255))

e outro eo primeiro exemplo, que voce trava como resolução minima 640x480 e faz tudo crescer a partir desta resolução.

voce tambem consegue usar essa escala para GUI(para escala de textos tenha como referencia apenas o g_Scale).

Vlw ai espero ter ajudado.

  • Thanks 1
Link to comment
30 minutes ago, Gw8 said:

fiz esse codigo como exemplo de base, nao quer dizer que ele deve ser seguido:


local sX,sY = guiGetScreenSize()
local min_Y = math.floor(sY/480)
local min_X = math.floor(sX/640)
if min_Y <= min_X then
	g_Scale = min_Y
else
	g_Scale = min_X
end
local g_Scale = 1 + 0.2*g_Scale
function resX(value)
    return (value*g_Scale)
end
function resY(value)
    return (value*g_Scale)
end
local _dxDrawRectangle = dxDrawRectangle
function dxDrawRectangle(x,y,w,h,tocolor,postGui)
	return _dxDrawRectangle(x,y,resX(w),resY(h),tocolor,postGui)
end
addEventHandler("onClientRender",root,
	function()
		dxDrawRectangle(sX/2-resX(350),sY/2-resY(250),700,500,tocolor(255,255,255,200),false)
	end
)

pense o seguinte o normal do mta é manter a os tamanho para todos os monitores exemplo :


 dxDrawRectangle(100,100,200,200,tocolor(255,255,255,255),false)

sempre manter tudo a x=100,y=100 e assim vai sempre ter os mesmos valores de pixels,  mas chegamos ao ponto que agora no inicio voce esta usando uma resolução de 640 px no eixo X, usar 200 px é um bom tamanho, mas se voce usar 200px em um monitor de 1080 px é um retangulo minusculo, e assim chegamos onde eu quero chegar que é a ideia da ESCALA.

onde eu PARTICULARMENTE só vejo duas maneira de se fazer com eficacia, um metodo que é por porcentagem exemplo:( que eu nao gosto muito, porque tira a proporção entre as coisas, vc tambem perde qualidade em imagens, etc..)


local sX,sY = guiGetScreenSize()
dxDrawRectangle(sX*0.2,sY*0.2,sX*0.4,sY*0.6,tocolor(255,255,255,255))

e outro eo primeiro exemplo, que voce trava como resolução minima 640x480 e faz tudo crescer a partir desta resolução.

voce tambem consegue usar essa escala para GUI(para escala de textos tenha como referencia apenas o g_Scale).

Vlw ai espero ter ajudado.

Vlw pela explicação, vai ser útil.

Link to comment
On 21/09/2018 at 13:40, Lord Henry said:

@danilin

Ele não pediu nada em DX. Ele só queria saber como alterar proporcionalmente o tamanho da fonte dos Labels (guiCreateLabel).

dxDrawRectangle(sX/2-resX(350),sY/2-resY(250),700,500,tocolor(255,255,255,200),false)

as posições de DX e GUI são a mesma coisa 

sX e sY
(sX/2-resX(350),sY/2-resY(250),700,500

vai dar no mesmo... já perdeu esse tempo testando ???
pois é!!! eu já.... abraços ai.

Link to comment
  • Other Languages Moderators

Então teste lá. Quando conseguir deixar um Label com o tamanho da fonte proporcional na tela, dai me avise.

Vocês estão fugindo do assunto do post, que era pra ser escala de Labels (textos) e indo para escala de elementos DX. Uma coisa funciona bem diferente da outra. Os elementos podem sim ser escalonados sem problemas de acordo com a resolução. Mas os textos não.

Link to comment
  • Other Languages Moderators
On 20/09/2018 at 11:42, Lord Henry said:

[...] Os elementos de texto GUI como os Labels, não possuem escala relativa. O parâmetro relative dele só serve para posição e tamanho do canvas dele. Mas o tamanho da fonte não muda a não ser que use guiCreateFont. [...]

Obviamente.

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