Jump to content

¿Colocar una dxImage alado de la otra?


Sergioks

Recommended Posts

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 xD

¿Alguien me podria decir como hacer eso?

- Gracias de Antemano

Link to comment
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 by Tomas
Link to comment
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
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
1 hour ago, Tomas said:

¿A qué te refieres? 


pos = {}

if not pos[i] then
  pos[i] = {...]
end

 

basicamente a eso xD. Porque, cuando usaba table.insert en el onClientRender, me lo creaba como 1000 veces el mismo item en la tabla y se bugeaba. Gracias xD

PST: Las tablas son mi talon de aquiles, nunca aprendi como funcionan :'v

Link to comment
  • Recently Browsing   0 members

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