Jump to content

Valores relativos con nivel de x elementData


Recommended Posts

Posted

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

Posted

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 

Posted

Gracias @Solidsnake por compartir tu código. Ahora mi duda es que si quiero hacer una barra que vaya aumentando o disminuyendo según un valor, ¿cómo tengo que hacerlo?

Posted

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

Posted

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 ) 

Posted

Muchísimas gracias @Solidsnake. En cuanto tenga tiempo haré un pequeño test a ver si me sale lo que necesito. Comunicare por aquí si hay algún problema.

Nuevamente gracias por la ayuda :D

Posted
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 
  

??

Posted

Si, ya que lo hice mediante el guieditor en mi pantalla. Lo único que hice fue realizar las divisiones y multiplicaciones como me dijo @Solidsnake14

Posted

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 

Posted

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. 
  

  • Recently Browsing   0 members

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