aka Blue Posted May 24, 2016 Share Posted May 24, 2016 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 Link to comment
Castillo Posted May 24, 2016 Share Posted May 24, 2016 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
aka Blue Posted May 24, 2016 Author Share Posted May 24, 2016 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? Link to comment
Castillo Posted May 24, 2016 Share Posted May 24, 2016 Diseñala con el tamaño total (100%), y despues lo dividis y multiplicas eso por el progreso. Link to comment
aka Blue Posted May 24, 2016 Author Share Posted May 24, 2016 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
Castillo Posted May 24, 2016 Share Posted May 24, 2016 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
aka Blue Posted May 25, 2016 Author Share Posted May 25, 2016 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 Link to comment
aka Blue Posted May 25, 2016 Author Share Posted May 25, 2016 Me dicen los de 1336 que lo ven mas arriba de lo normal. Link to comment
Tomas Posted May 25, 2016 Share Posted May 25, 2016 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
aka Blue Posted May 25, 2016 Author Share Posted May 25, 2016 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 Link to comment
aka Blue Posted May 25, 2016 Author Share Posted May 25, 2016 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
Enargy, Posted May 26, 2016 Share Posted May 26, 2016 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
Castillo Posted May 26, 2016 Share Posted May 26, 2016 Ese codigo hace exactamente lo mismo, fijate que si lo ejecutas, ambos dan el mismo resultado. Link to comment
Recommended Posts