Sergioks Posted November 16, 2016 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
Tomas Posted November 16, 2016 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
aka Blue Posted November 16, 2016 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
Tomas Posted November 16, 2016 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.
Sergioks Posted November 17, 2016 Author 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..
Tomas Posted November 17, 2016 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
Sergioks Posted November 17, 2016 Author 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
Recommended Posts