Arsilex Posted February 5, 2017 Share Posted February 5, 2017 Buenos días, ayer estaba aburrido por la noche así que decidí hacer un pequeño stream en mi canal creando un sistema bastante simple de gráficos en mta, Voy a dejar el video y el codigo en si por si les es de utilidad en el vídeo pueden ver todos los errores que eh tenido y como he ido resolviéndolos supongo que para algunos puede ser util aprender como es el proceso de debugear scripts. Video: Código: local graphics = {} local offset = 10 function getTheMaxValue(array) local cuarrentValue = 0 for i = 1, #array do local data = array[i] if data > cuarrentValue then cuarrentValue = data end end return cuarrentValue end function calculateYByMaxValue(value, maxValue) if value and maxValue then local percentaje = value * 100 / maxValue return percentaje end return false end function renderGraphics() dxDrawText(inspect ( graphics ), 10, 200, 200, 700) for i = 1, #graphics do local data = graphics[i] dxDrawRectangle(data.x, data.y, data.w, data.h, tocolor(255, 255, 255)) local x, y, w, h = data.x + 10, data.y + 10, data.w - 20, data.h - 20 local distance = math.floor(w/#data.data) for i = 1, #data.data do local posY = calculateYByMaxValue(data.data[i], data.maxValue) / 100 * h - 10 dxDrawRectangle(x + distance * i - 5, (y + h) - posY - offset, 5, 5, tocolor(150, 150, 150)) local posY2 = calculateYByMaxValue(data.data[i - 1] or 2, data.maxValue) / 100 * h - 10 dxDrawLine(x + distance * (i - 1) - 2, (y + h) - posY2 + 2 - offset, x + distance * i - 2, (y + h) - posY + 2 - offset, tocolor(150, 150, 150), 2 ) dxDrawText(data.data[i], x + distance * i - 5 - 50, y + h - 8, 100 + (x + distance * i - 5 - 50), y + h + 8, tocolor(150, 150, 150), 1, "default-bold", "center", "center") end end end function createGraphic(x, y, w, h, values) if x and y and w and h then local array = {} table.sort(values, function(a,b) return a<b end) array.x = x array.y = y array.w = w array.h = h array.data = values array.maxValue = getTheMaxValue(values) table.insert(graphics, array) if #graphics == 1 then outputDebugString("[Graphics] Activando renderizado.") addEventHandler("onClientRender", root, renderGraphics) end outputDebugString("[Graphics] Nuevo grafico creando.") else outputDebugString("[Graphics] Faltan argumentos") end end createGraphic(500, 200, 500, 500, {100, 101, 200, 210, 500, 1000, 201, 250, 305, 350, 460}) Si tenéis alguna sugerencia en que podría hacer en mi siguiente stream si es que algún día lo hago bueno, dejarlo en los comentarios del vídeo o aquí mismo. Pueden hacer lo que quieran con el código. Link to comment
MTA Team 0xCiBeR Posted February 6, 2017 MTA Team Share Posted February 6, 2017 Buen aporte, solo que tenes un pequeño error en la linea 34. Se ve claramente en un ejemplo como el siguiente: Spoiler Deberías cambiar la línea 34 por esto: local posY2 = calculateYByMaxValue(data.data[i - 1] or 0, data.maxValue) / 100 * h - 10 Link to comment
Arsilex Posted February 6, 2017 Author Share Posted February 6, 2017 (edited) 4 hours ago, .:CiBeR:. said: Buen aporte, solo que tenes un pequeño error en la linea 34. Se ve claramente en un ejemplo como el siguiente: Reveal hidden contents Deberías cambiar la línea 34 por esto: local posY2 = calculateYByMaxValue(data.data[i - 1] or 0, data.maxValue) / 100 * h - 10 Principalmente te agradezco tu respuesta pero..realmente no hace falta ponerlo en 0 porque 2 es justo lo que se necesita en ese caso puedes probarlo. Se hizo así principalmente para que la linea pase justo por el medio del rectangulo Edited February 6, 2017 by Arsilex Link to comment
MTA Team 0xCiBeR Posted February 8, 2017 MTA Team Share Posted February 8, 2017 (edited) Viste el gráfico? Que parte de ese gráfico esta bien si el punto 0, o tambien llamado origen sale del punto 2? Sino estarías agregando un punto "2" a tu conjunto que en realidad va del 1 al 10. En todo caso debería partir del primer valor, el cual sería el menor valor. Edited February 8, 2017 by .:CiBeR:. Link to comment
Arsilex Posted February 8, 2017 Author Share Posted February 8, 2017 8 hours ago, .:CiBeR:. said: Viste el gráfico? Que parte de ese gráfico esta bien si el punto 0, o tambien llamado origen sale del punto 2? Sino estarías agregando un punto "2" a tu conjunto que en realidad va del 1 al 10. En todo caso debería partir del primer valor, el cual sería el menor valor. Exactamente por eso que te dije anteriormente estoy partiendo del segundo pixel porque la linea tiene que pasar justo por el medio de del cuadrado si te fijas bien los cuadrados no tienen ese offset por asi decirlo de 2 pixeles lo cual les hace empezar en 0 + width/#array y para que la linea pase bien de un punto a otro punto sin que se vea mal empiezo cada punto 2 pixeles mas a la derecha asi haciendo el offset entre el start del cuadrado y la posición donde se encuentra. Así haciendo que la linea empiece justo en la mitad. Link to comment
MTA Team 0xCiBeR Posted February 8, 2017 MTA Team Share Posted February 8, 2017 No me estas entendiendo... Pero bueno dejemoslo ahi Link to comment
CITMartin Posted March 19, 2017 Share Posted March 19, 2017 En algunos casos, es interesante usar mejor un gráfico de pastel. Aunque buen trabajo, para la gestión de recursos es bastante útil. Link to comment
Citrus Posted April 2, 2017 Share Posted April 2, 2017 Una pregunta, no tienes el famoso panel de login de dayz? el que podes crear a tu personaje y luego logear???? Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now