He aquí 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 buscándolo. Solución, intentar "modular" nuestra app. Un ejemplo así sencillo sería por ejemplo... enga va, un shell.
Antes de comenzar, como siempre, PENSAMOS.
¿Qué queremos? un escritorio, un cursor, algún widget tipo relojito, oh, sólo con esto el código será inhumano; pues nop, no os desesperéis...
Como Jack el destripador, vayamos por partes, o mejor dicho, MODULEMOS el programa.
Quiero que sea un wallpaper y mmm... de momento nada más.
escritorio = { img = image.load("rutafondo.png"), blit = function (yomismo) yomismo.img:blit(0,0); end, }
¿Por qué la variable "yomismo" dentro de la función? Lo veremos más adelante...
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 más, X e Y, y una función para leer los controles. Mismo truco de yomismo.
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 método 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, ¿cómo 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, tomároslo 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.
Comentarios
No es posible?
No se puede hacer algo parecido en C?
Claro que se puede usas
Claro que se puede usas extern:
http://www.zator.com/Cpp/E4_1_8d.htm
void
http://www.mailxmail.com/curso-programacion-c/punteros-void-funciones
he #include
http://msdn.microsoft.com/en-us/library/36k2cdd4(v=vs.80).aspx
Error
Al ejecutarlo me sale este error:
cur.lua:6: attempt to compare number with function
Este es mi codigo:
un buen metodo que voy a
un buen metodo que voy a utilizar a partir de ahora ;)
saludos
Ahi, ahi, enseñando a
Ahi, ahi, enseñando a programar "bonito" que sino, dejas el codigo apartado un par de semanas y te tocará descifrar geroglíficos xD
-----[[7 años en Scenebeta, con la misma ilusión que la del primer día]]----
Un metodo similar a las
Un metodo similar a las librerias :P Ya lo había utilizado alguna vez, pero es muy muy útil.
Muy interesante.
Muy interesante. Gran tuto.
Un saludo, dev.
No había visto esto. Muy
No había visto esto.
Muy buena forma deviante.
Saludos