Duda

A ver, estuve mirando lo de metodología(gracias gorrister ;-P), y tengo una parte de mi código reestructurada:

--Inicializamos una array.
r = {}
  r[1] = { y = n1 }
  r[2] = { y = n2 }
 
--creamos una variable como un contador.
i = 0
 
--Aquí va código que no biene a cuento.
 
while true do
   screen:clear()
   --PROBLEMA:
   while i < 2 do
      i = i + 1
      r[i].y = r[i].y + 3
   end
   if i > 2 then
      i = 0
   end
...

El problema consiste en que ese bucle while funcionaría bien en C, pero en lua no se como hacer para sustituir el valor del indice por el valor de una array, alguna ayuda?

Saludos

 


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de P22

Solucionado

for i = 1, table.getn(r) do
   r[i].y = r[i].y + 3
end

Ese es el código.

Muchas gracias, pspgorrister.


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de pspgorrister

No entiendo a qué te

No entiendo a qué te refieres con "sustituir el valor del indice por el valor de una array"

PD: El bucle lo harías mejor (sólo 3 lineas) con un for y getn().

Un saludo


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de P22

Donde array es variable, con

Donde array es variable, con lo que me refiero a usar como índice de la array r el valor de i.

Saludos

Imagen de pspgorrister

Sigo sin entenderte xDDD

Ya estás usando el valor de i como índice del array r.

De todas formas a ver si puedes poner un ejemplo con pseudocódigo aunque sea


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de P22

Pero esque el código es ese

Pero esque el código es ese pero no funciona, me lanza un error, ese es mi problema.

Os dejo el código original (Que lanza un error de que no existe el índice ir )

Saludos

bg = Image.load("System/img/juego/mastil.png")
az = Image.load("System/img/juego/azul.png")
ve = Image.load("System/img/juego/verde.png")
ro = Image.load("System/img/juego/rojo.png")
Mp3me.load("System/music/elabrelosojos.mp3")
 
tempo = Timer.new()
 
ir = 0
 
xr = 193
xaz = 162
xv = 253
 
r = {}
  r[1] = { y = -29 }
 
 
while true do
   screen:clear()
   temp = tempo:time()
   pad = Controls.read()
   screen:blit(0,0,bg)
   screen:blit(xr,r[1].y,ro)
   while ir < 2 do
      ir = ir+1
      r[ir].y = r[ir].y + 3
   end
   if ir > 1 then
      ir = 0
   end
 
   if temp > 1350 then
   Mp3me.play()
   if pad:start() then
      Mp3me.pause()
      Mp3me.stop()
      dofile("System/menu.lua")
   end
   end
screen.waitVblankStart()
   screen.flip()
end


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de pspgorrister

No tienes declarado r[2] por

No tienes declarado r[2] por eso te da el error porque está fuera de índice. No obstante, cambia

   while ir < 2 do
      ir = ir+1
      r[ir].y = r[ir].y + 3
   end
   if ir > 1 then
      ir = 0
   end

por

   for ir 1,r:getn()
      r[ir].y = r[ir].y + 3
   end

El segundo código está mas optimizado y es más versátil ya que no tienes que saber el tamaño del vector.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de P22

Me lanza este error: Error:

Me lanza este error:

Error: System/canciones/1.lua:25: '=' or 'in' expected near '1'' Sonrisa

Press start to restart

PD: La sonrisita si que me viene.

Saludos


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de pspgorrister

Re: Error

Igual es porque le falta un "do" al final de la linea del for, o que no he puesto bien la sintaxis (aparte de lo del "do"), pero creo que es así en Lua.

 

 


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de P22

--Antes for ir 1,r:getn()

--Antes
for ir 1,r:getn()
   r[ir].y = r[ir].y + 3
end
--Ahora
for ir = ir + 1,r:getn() do
   r[ir].y = r[ir].y + 3
end

Supongo que sería así, pero no funciona.

Saludos


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de pspgorrister

Me faltaba un "=", es: for

Me faltaba un "=", es:

for ir=1,r:getn()

Imagen de P22

te falta poner el do, y si

te falta poner el do, y si pongo do me dice que getn es una variable nil

Imagen de pspgorrister

Pues eso sí que no lo sé,

Pues eso sí que no lo sé, porque la variable r la inicializas correctamente como una tabla. Yo el código lo veo bien.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de P22

Cito al megatutorial de

Cito al megatutorial de pipagerardo:

#table   Devuelve
número total de elementos de una tabla, que no tiene por que ser el número
del último índice.

 

table = {};          table[1]
= "uno";           table[2] = "dos";            table[9]
= "nueve"

n = #table           -->
n = 3

--------------------------------------------------------------------------------------------------------------------------------

table.getn( table )                   --
Devuelve el número total de elementos de una tabla igual que "#".

Supongo que el getn se podría meter dentro de una variable, como viene ahí bien explicado.

Saludos

PD: Lo pruebo y te cuento.

EDITO:Como me esperaba, no funciona y me da este error:

Error: blabalbla.. :26: for' limit must  be a number.

blablabla

eso me dice si pongo do, y si no lo pongo me dice que lo ponga.


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.