Sergioks Posted November 16, 2016 Share Posted November 16, 2016 Hola! Tengo una pequeña duda. Quisiera saber, como puedo hacer para que aparezca una cantidad de imagenes dadas por una tabla y que estas, aparezcan una a lado de la otra, sin chocarse entre si. local items = { {"Item1"}, {"Item2"}, {"Item3"}, }, addEventHandler("onClientRender", root, function() for i=1, #items do dxDrawImage(x, y, w, h, "images/"..items[i]..".png") -- ¿que calculo puedo hacer para definir 'x', 'y', 'w' y 'h'?? end end) Es decir, que por ejemplo, en la tabla hallan 5 items.. bueno, que aparezcan 5 imagenes una alado de la otra. Ademas de que, tambien quiero, que aparezcan solo 3 por linea. Osea, que cuando hallan 3 imagenes, continue la cuarta imagen abajo de la primera.. ya creo que me entienden ¿Alguien me podria decir como hacer eso? - Gracias de Antemano Link to comment
Tomas Posted November 16, 2016 Share Posted November 16, 2016 (edited) maletero = {1, 2, 3, 4, 5, 6} startX, startY, width, height, iPR = 150, 150, 75, 75, 3 addEventHandler('onClientRender', root, function () local row, index = 1, 1 for i = 1, #maletero do x = startX * index; y = startY * row if ( i%iPR == 0 ) then row = row + 1 index = 1 else index = index + 1 end dxDrawRectangle(x, y, width, height) end end ) Lo escribí hace tiempo para un post de Bluepie. Edited November 16, 2016 by Tomas Link to comment
aka Blue Posted November 16, 2016 Share Posted November 16, 2016 Quien me llama? Es broma, @Tomas podrias explicar un poco como funciona? Me gustaria entenderlo mejor. Y, si se le quiere dar click, como comprobamos cual es? Gracias y disculpen meterme Link to comment
Tomas Posted November 16, 2016 Share Posted November 16, 2016 20 minutes ago, aka Blue said: Quien me llama? Es broma, @Tomas podrias explicar un poco como funciona? Me gustaria entenderlo mejor. Y, si se le quiere dar click, como comprobamos cual es? Gracias y disculpen meterme maletero = {1, 2, 3, 4, 5, 6} -- array, cada valor es un rectángulo startX, startY, width, height, iPR = 150, 150, 75, 75, 3 -- variables estáticas: startX = posicion del primer rectángulo, startY = posicion de la primer fila, width & height = ancho y alto del rectángulo, iPR = cantidad de rectángulos por fila addEventHandler('onClientRender', root, function () local row, index = 1, 1 -- definimos fila y rectángulo (relativo a la fila) actuales, como es el principio 1 y 1 for i = 1, #maletero do -- loopeamos maleteros, cada iteración es un rectángulo nuevo x = startX * index; y = startY * row -- posicion x e y del rectángulo, x depende de la cantidad de rectángulos por fila e y de la cantidad de filas if ( i%iPR == 0 ) then -- si la cantidad total de rectángulos es múltiplo del total por fila, tenemos que saltar a otra row = row + 1 -- saltamos a otra fila index = 1 -- volvemos a 1 la cantidad relativa de los rectángulos else -- si no es múltiplo index = index + 1 -- seguimos sumando rectángulos en la misma fila end dxDrawRectangle(x, y, width, height) -- dibujamos con las posiciones dadas end end ) Me parece que quedó bien explicado, cualquier cosa pregunten. Para "reconocer" cada rectángul puedes guardar en cada iteración los datos x e y del rectángulo en una tabla y luego cuando se cliquee comparar a cual de ellos corresponde. Link to comment
Sergioks Posted November 17, 2016 Author Share Posted November 17, 2016 3 hours ago, Tomas said: maletero = {1, 2, 3, 4, 5, 6} -- array, cada valor es un rectángulo startX, startY, width, height, iPR = 150, 150, 75, 75, 3 -- variables estáticas: startX = posicion del primer rectángulo, startY = posicion de la primer fila, width & height = ancho y alto del rectángulo, iPR = cantidad de rectángulos por fila addEventHandler('onClientRender', root, function () local row, index = 1, 1 -- definimos fila y rectángulo (relativo a la fila) actuales, como es el principio 1 y 1 for i = 1, #maletero do -- loopeamos maleteros, cada iteración es un rectángulo nuevo x = startX * index; y = startY * row -- posicion x e y del rectángulo, x depende de la cantidad de rectángulos por fila e y de la cantidad de filas if ( i%iPR == 0 ) then -- si la cantidad total de rectángulos es múltiplo del total por fila, tenemos que saltar a otra row = row + 1 -- saltamos a otra fila index = 1 -- volvemos a 1 la cantidad relativa de los rectángulos else -- si no es múltiplo index = index + 1 -- seguimos sumando rectángulos en la misma fila end dxDrawRectangle(x, y, width, height) -- dibujamos con las posiciones dadas end end ) Me parece que quedó bien explicado, cualquier cosa pregunten. Para "reconocer" cada rectángul puedes guardar en cada iteración los datos x e y del rectángulo en una tabla y luego cuando se cliquee comparar a cual de ellos corresponde. ¿Como puedo guardar esos datos en un onClientRender? dado que cuando lo hago, se crean miles de variables con el mismo elemento en las tablas.. Link to comment
Tomas Posted November 17, 2016 Share Posted November 17, 2016 16 hours ago, Sergioks said: ¿Como puedo guardar esos datos en un onClientRender? dado que cuando lo hago, se crean miles de variables con el mismo elemento en las tablas.. ¿A qué te refieres? pos = {} if not pos[i] then pos[i] = {...] end Link to comment
Sergioks Posted November 17, 2016 Author Share Posted November 17, 2016 1 hour ago, Tomas said: ¿A qué te refieres? pos = {} if not pos[i] then pos[i] = {...] end basicamente a eso . Porque, cuando usaba table.insert en el onClientRender, me lo creaba como 1000 veces el mismo item en la tabla y se bugeaba. Gracias PST: Las tablas son mi talon de aquiles, nunca aprendi como funcionan :'v Link to comment
Recommended Posts