Jump to content

Valores relativos con nivel de x elementData


Recommended Posts

Bueno, estoy teniendo un grave problema últimamente con las resoluciones de pantalla. Veamos, yo hago mis scripts (lo que vienen siendo paneles y demás DX) en el guieditor usando pues la función que ofrece de relatividad. El problema que tengo es que todos los que tienen mi resolución de pantalla, pues sí, lo ven bien, pero aquellos que la tienen mayor lo ven mal o solo ven una parte.

Lo que hago es comprobar el valor de un elementData y seguidamente, realizar un anchototal para la barra (en éste caso de resistencia del jugador). Quisiera saber cual es la mejor manera de realizar el script para que todos los vean bien y se más óptimo el mismo. Mi resolución de pantalla es 1024x768 (es una caca, pero que se le va a hacer, vivo debajo de un puente con todo el musgo).

function mostrarResistencia () 
    local resistencia = getElementData ( localPlayer, "resistencia" ) 
    local anchototal = 120 
    local anchototal2 = ( resistencia * anchototal ) / 106000 
        dxDrawRectangle(sx * 0.8086, sy * 0.2214, sx * 0.1221, sy * 0.0273, tocolor(0, 0, 0, 255), false) 
        dxDrawRectangle(sx * 0.8125, sy * 0.2253, sx * 0.1133, sy * 0.0182, tocolor(49, 131, 170, 100), false) 
        dxDrawRectangle(sx * 0.8125, sy * 0.2253, sx * anchototal2, sy * 0.0182, tocolor(49, 121, 151, 255), false) 
        dxDrawText("RESISTENCIA", (sx * 0.8096) + 1, (sy * 0.2201) + 1, (sx * 0.9287) + 1, (sy * 0.2461) + 1, tocolor(0, 0, 0, 255), 0.42, "bankgothic", "center", "center", false, false, false, false, false) 
        dxDrawText("RESISTENCIA", sx * 0.8096, sy * 0.2201, sx * 0.9287, sy * 0.2461, tocolor(255, 255, 255, 255), 0.42, "bankgothic", "center", "center", false, false, false, false, false) 
end  

Gracias de antemano :D

Link to comment

Yo no uso lo que ofrece el guieditor, porque por mi experiencia, no sirve.

Esta es mi manera de hacer que se vea bien en todas las resoluciones:

local sourceX, sourceY = 1920, 1080 -- La resolucion donde fue creado 
local sx, sy = guiGetScreenSize ( ) 
  
addEventHandler ( "onClientRender", root, 
    function ( ) 
        dxDrawRectangle ( ( 5 / sourceX ) * sx, ( 5 / sourceY ) * sy, ( 5 / sourceX ) * sx, ( 5 / sourceY ) * sy, tocolor ( 255, 255, 255 ) ) 
    end 
) 

Y para la escala de los textos:

( sy / sourceY ) * scale 

Link to comment

Osea, básicamente la x que es la anchura de la barra la debo dividir y multiplicar tal que así, ¿No? Disculpa mi ignorancia pero es que nunca me puse bastante en serio con este tema y tengo bastantes dudas.

local anchura = ( valor * maxanchura )

( anchura / sourceX ) * sx

Link to comment

Ejemplo:

El width es 210, lo que haces es dividir 210/100 y multiplicar el resultado, osea 2.1 por el progreso.

local width = 210 
local progress = 75 
newWidth = ( width / 100 ) * progress 

Obviamente que no hace falta dividirlo en el codigo, lo podes hacer con la calculadora y poner directamente:

newWidth = ( 2.1 * progress ) 

Link to comment
Me dicen los de 1336 que lo ven mas arriba de lo normal.

Cambiaste esto:

  
local sourceX, sourceY = 1920, 1080 -- La resolucion donde fue creado 
  

por esto:

  
local sourceX, sourceY = 1024, 768 -- La resolucion donde fue creado 
  

??

Link to comment

Aquí esta, es algo largo pero son las barras de necesidades de cada jugador.

  
local sourceX, sourceY = 1024, 768 
local sx, sy = guiGetScreenSize ( ) 
  
function dibujado ( ) 
    -- Calculaciones hambre 
    local width = 148 
    local nivelHambre = getElementData ( localPlayer, "hambre" ) 
    local newWidth = ( width / 100 ) * nivelHambre 
    -- Dibujado del hambre 
    dxDrawRectangle( (812/sourceX)*sx, (172/sourceY)*sy, (155/sourceX)*sx, (16/sourceY)*sy, tocolor(0, 0, 0, 255), false) 
    dxDrawRectangle( (815/sourceX)*sx, (174/sourceY)*sy, (148/sourceX)*sx, (11/sourceY)*sy, tocolor(200, 105, 30, 90), false) 
    dxDrawRectangle( (815/sourceX)*sx, (174/sourceY)*sy, (newWidth/sourceX)*sx, (11/sourceY)*sy, tocolor(208, 105, 30, 255), false) 
    dxDrawText("HAMBRE", (813/sourceX)*sx, (172/sourceY)*sy+2, (964/sourceX)*sx, (188/sourceY)*sy, tocolor(0, 0, 0, 255), ( sy / sourceY ) * 0.40, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("HAMBRE", (813/sourceX)*sx, (172/sourceY)*sy, (964/sourceX)*sx, (188/sourceY)*sy, tocolor(255, 255, 255, 255), ( sy / sourceY ) * 0.40, "bankgothic", "center", "center", false, false, false, false, false) 
    -- Caculaciones sed 
    local widthSed = 148 
    local nivelSed = getElementData ( localPlayer, "sed" ) 
    local newWidthSed = ( widthSed / 100 ) * nivelSed 
    -- Dibujado de la sed 
    dxDrawRectangle( (812/sourceX)*sx, (192/sourceY)*sy, (155/sourceX)*sx, (16/sourceY)*sy, tocolor(0, 0, 0, 255), false) 
    dxDrawRectangle( (815/sourceX)*sx, (194/sourceY)*sy, (148/sourceX)*sx, (11/sourceY)*sy, tocolor(80, 160, 174, 90), false) 
    dxDrawRectangle( (815/sourceX)*sx, (194/sourceY)*sy, (newWidthSed/sourceX)*sx, (11/sourceY)*sy, tocolor(80, 160, 174, 255), false) 
    dxDrawText("SED", (813/sourceX)*sx, (210/sourceY)*sy+2, (964/sourceX)*sx, (188/sourceY)*sy, tocolor(0, 0, 0, 255), ( sy / sourceY ) * 0.40, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("SED", (813/sourceX)*sx, (210/sourceY)*sy, (964/sourceX)*sx, (188/sourceY)*sy, tocolor(255, 255, 255, 255), ( sy / sourceY ) * 0.40, "bankgothic", "center", "center", false, false, false, false, false) 
    -- Calculaciones resistencia 
    local widthResistencia = 148 
    local nivelResistencia = getElementData ( localPlayer, "resistencia" ) 
    local newWidthResistencia = ( widthResistencia / 100 ) * nivelResistencia    
    -- Dibujado de la resistencia 
    dxDrawRectangle( (812/sourceX)*sx, (212/sourceY)*sy, (155/sourceX)*sx, (16/sourceY)*sy, tocolor(0, 0, 0, 255), false) 
    dxDrawRectangle( (815/sourceX)*sx, (214/sourceY)*sy, (148/sourceX)*sx, (11/sourceY)*sy, tocolor(0, 92, 0, 90), false) 
    dxDrawRectangle( (815/sourceX)*sx, (214/sourceY)*sy, (newWidthResistencia/sourceX)*sx, (11/sourceY)*sy, tocolor(0, 92, 0, 255), false) 
    dxDrawText("RESISTENCIA", (813/sourceX)*sx, (251/sourceY)*sy+2, (964/sourceX)*sx, (188/sourceY)*sy, tocolor(0, 0, 0, 255), ( sy / sourceY ) * 0.40, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("RESISTENCIA", (813/sourceX)*sx, (251/sourceY)*sy, (964/sourceX)*sx, (188/sourceY)*sy, tocolor(255, 255, 255, 255), ( sy / sourceY ) * 0.40, "bankgothic", "center", "center", false, false, false, false, false) 
    -- Texto de ayuda 
    dxDrawText("Usa /shownecesidades para quitar las barras", (799/sourceX)*sx, (231/sourceY)*sy+2, (960/sourceX)*sx, (242/sourceY)*sy, tocolor(0, 0, 0, 255), ( sy / sourceY ) * 0.80, "default", "left", "top", false, false, false, false, false) 
    dxDrawText("Usa /shownecesidades para quitar las barras", (799/sourceX)*sx, (231/sourceY)*sy, (960/sourceX)*sx, (242/sourceY)*sy, tocolor(255, 255, 255, 255), ( sy / sourceY ) * 0.80, "default", "left", "top", false, false, false, false, false) 
end 

Link to comment

Yo lo hago de esta forma:

local sx, sy = guiGetScreenSize() 
local rx, ry = 1024, 768 
local px, py = (sx / rx), (sy / ry) 
dxDrawRectangle(px*500, py*500, px*500, py*500, tocolor(80, 160, 174, 255), false) 
dxDrawText("Hello", px*500, py*500, px*200, py*200, tocolor(0, 0, 0, 255), 1, "bankgothic", "left", "top", false, false, false, false, false) 
-- Para ser mas eficiente puedes reescribir las funciones directX para organizar de un solo calculo la compatibilidad para todas las resoluciones y luego las agregas en cualquier función que las necesite con valores absolutos sacados con el guieditor, sin necesidad de volver a calcular algo. 
  

Link to comment
  • Recently Browsing   0 members

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