Minituto - Programa modular.

He aqui nuestras queridas apps, que cada vez que añadimos algo se va haciendo el código más y más largo, más y más ILEGIBLE. Falla algo y te vuelves loco buscandolo. Solución, intentar "modular" nuestra app. Un ejemplo así sencillo sería... por ejemplo... enga va, una shell.

Antes de comenzar, como siempre, PENSAMOS.
Qué queremos... un escritorio... un cursor... algun widget... tipo relojito... oh, solo con esto el código será inhumano.... pues nop, no os desespereis...

 

Como jack el destripador, vayamos por partes, o mejor dicho, MODULEMOS el programa.

 

ESCRITORIO:

Quiero que sea un wallpaper... y mm... de momento nada mas.

escritorio = {
    img = image.load("rutafondo.png"),
    blit = function (yomismo) yomismo.img:blit(0,0); end,
}

Por que la variable "yomismo" dentro de la función? Lo veremos más adelante...

CURSOR:

Enga, el cursor, quiero que sea con el analógico... pues vamos:

cursor = {
   img = image.load("rutacursor.png"),
   x = 240,
   y = 136,
   procesa = function (yomismo)
      if controls.analogx > 40 then yomismo.x = yomismo.x + 3; end
      if controls.analogx < 40 then yomismo.x = yomismo.x - 3; end
   end,
   blit = function (yomismo) 
      yomismo:procesa();
      yomismo.img:blit(yomismo.x,yomismo.y);
   end
}

Eiii, este se complica... nada, son dos variables mas, X e Y, y una funcion para leer los controles. Mismo truco de yomismo.

RELOJITO:

Amos con un relojito!

relojito = {
   blit = function (yomismo)
     screen.print(10,10,os.date());
   end
}

Ehh, este es sencillo! xD No pasa nada, es a metodo de ejemplo.

Técnica "yomismo" o self :

Recordar que una tabla, si se llama una función con DOS PUNTOS, el PRIMER argumento de la función será esa misma tabla. Es decir, al hacer cursor:blit(); estamos haciendo en realidad: cursor.blit(cursor); (o algo así).

 

Ahora, como quedaría el programa principal?

Si hemos guardado esos tres codigos en tres archivos .lua distintos, wall.lua, cur.lua y rel.lua, pues el code sería tal que así:

dofile("wall.lua");
dofile("cur.lua");
dofile("rel.lua");
 
while true do
   controls.read();
 
   escritorio:blit();
   relojito:blit();
   cursor:blit();
 
   screen.flip();
end

Eii, como cambia la cosa! Pues hale, tomaroslo como recomendación para que estructuréis mejor vuestras aplicaciones, y encontréis rápidamente los errores. Más adelante ya postearé más "how to" o tutos de este tipo. Un saludo.


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es


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 User170294

Me parece que esté trozo está

EDITO: Me he confundido, el post está correcto



Me parece que esté trozo está mal:

cursor = {
   img = image.load("rutacursor.png"),
   x = 240,
   y = 136,
   procesa = function (yomismo)
      if controls.analogx > 40 then yomismo.x = yomismo.x + 3; end
      if controls.analogx < 40 then yomismo.x = yomismo.x - 3; end
   end,
   blit = function (yomismo) 
      yomismo:procesa();
      yomismo.img:blit(yomismo.x,yomismo.y);
   end
}

 

A mí solo me funciona si lo pongo así:

cursor = {
   img = image.load("rutacursor.png"),
   x = 240,
   y = 136,
   procesa = function (yomismo)
      if controls.analogx > 40 then cursor.x = cursor.x + 3; end
      if controls.analogx < 40 then cursor.x = cursor.x - 3; end
   end,
   blit = function (yomismo) 
      yomismo:procesa();
      yomismo.img:blit(yomismo.x,yomismo.y);
   end
}

Salu2


Imagen de User170294

Yo lo que hago es modularlo

Yo lo que hago es modularlo todo en funciones. Y nunca salir del archivo.

Imagen de NEKERAFA

No

Yo al contrario, lo modulo en funciones y en archivos diferentes...

Creo que queda más bonito así.

Imagen de User170294

cada cual a su estilo

cada cual a su estilo jaja

salu2

 

Imagen de NEKERAFA

XDD

Yo creo que me paso haciendolo así... por lo menos no tengo que bajar el ratón, solo picar en el archivo jajajajaja

Así queda mas "bonico".

Muy bueno, dev.

Un saludo.

Imagen de Kenta15

:O

Gracias por el tuto :DD

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.