Spoiler: [ Mostrar ]
Spoiler: [ Ocultar ]
- INTRODUCCIÓN A LUA, ¿QUÉ ES LUA?
Decir para aquellos súper-elite de la programación, que este tutorial esta hecho por un aprendiz de LUA para aprendices de LUA. Si eres un crack de la programación en C/C++, no sigas leyendo, ya que esto no es mas que para empezar a marranear con la PSP, ya que aquellos que de verdad quieran hacer un juego bueno y completo para la PSP, tendrán que aprender C/C++, y este no es cometido del tutorial.
LUA es un lenguaje de programación imperativo y estructurado, bastante ligero y que fue diseñado como lenguaje de script. Hereda ciertas características de C.
LUA fue creado en 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo y Waldemar Celes, miembros del Grupo de Tecnología en Com****ción Gráfica (Tecgraf) en la Pontificia Universidad Católica de Río de Janeiro. Las versiones de LUA anteriores a la 5.0 fueron distribuidas bajo una licencia similar a la BSD, de la versión 5.0 en adelante se utiliza la licencia MIT, compatible con la GPL.
LUA es un lenguaje de extensión, suficientemente compacto para usarse en diferentes plataformas. En LUA las variables no tienen tipo, sólo los datos y pueden ser lógicos, enteros, números con punto flotante o cadenas. Estructuras de datos como matrices, conjuntos, tablas hash, listas y registros pueden ser representadas utilizando la única estructura de datos de LUA: la tabla.
La semántica de LUA puede ser extendida y modificada redefiniendo funciones de las estructuras de datos utilizando metatablas. LUA ofrece soporte para funciones de orden superior, colector de basura. Combinando todo lo anterior, es posible utilizar LUA en programación orientada a objetos.
Los programas en LUA no son interpretados directamente, sino compilados a código de máquina, que es ejecutado en la máquina virtual de LUA. El proceso de compilación es normalmente transparente al usuario y se realiza en tiempo de ejecución, pero puede hacerse con anticipación para aumentar el desempeño y reducir el uso de memoria.
LUA se ha usado mucho en juegos, como World of Warcraft, donde el usuario tiene la posibilidad de personalizar la interfaz, animación de los personajes y apariencia del entorno.
También en un mod tipo "sandbox" para Half-Life 2 llamado Garry's Mod, para modificar las armas
El manejador de ventanas Ion utiliza LUA para personalizar la apariencia y extender su funcionalidad.
LUA también se ha usado para procesar datos de entrada a sistemas complejos, configurar aplicaciones, controlar hardware y muchos otras cosas.
Nosotros haremos con LUA pequeños juegos para la PSP, que aunque no sean gran cosa o no sean nada, la satisfacción de jugar a un juego hecho por ti en tu PSP es algo tremendo.
- ESTRUCTURA BASICA DE UN PROGRAMA EN LUA
La programación en LUA al igual que todos los demás lenguajes de programación requiere de un mínimo de orden en la escritura del código, para en futuras lecturas de nuestro código no andar dando vueltas de arriba abajo buscando lo que necesitamos.
Aparte de esto, el código en LUA suele llevar un cierto orden de elaboración del mismo, que si bien no es obligatorio si es recomendado.
Nosotros lo haremos así y nos acostumbraremos a llevar un orden y una lógica de trabajo.
Los programas en LUA suelen empezar con la declaración de colores RGB a usar en el mismo, las fuentes a emplear por el programa si es que queremos otras a las determinadas, la inicialización de las variables de nuestro programa, la carga de imágenes y sonidos a usar, las posibles funciones que el programa va a usar y por ultimo el bucle principal del programa.
No tiene porque llevar este orden, pero nosotros lo haremos así.
A continuación pongo un pequeño ejemplo de código en LUA:
--Declaramos colores
blanco = Color.new(255, 255, 255)
--Bucle principal del programa
while true do
screen:clear()
screen:print(200, 100, "Hola Mundo", blanco)
screen.waitVblankStart()
screen.flip()
end
blanco = Color.new(255, 255, 255)
--Bucle principal del programa
while true do
screen:clear()
screen:print(200, 100, "Hola Mundo", blanco)
screen.waitVblankStart()
screen.flip()
end
Este seria un pequeñísimo programa en LUA con el cual presentaríamos por pantalla Hola Mundo en color blanco.
Como veis, es un lenguaje de programación fácil, que como veremos mas adelante se asemeja mucho a C.
- PROGRAMANDO: IMPRIMIR TEXTO EN PANTALLA
Antes de seguir he de decir que el ejemplo que vamos a explicar esta sacada de BetaPSP. Lo he elegido porque es un buen ejemplo y mas complejo que el tipico "Hola Mundo" estático escrito en la seccion anterior de este tutorial.
Después d ver todo el rollo anterior y de explicar la autoria del programa a analizar, vamos a lo que de verdad todos estáis deseando, empezar a programar, pero antes os diré que necesitaremos para ello.
Lo primero de todo será un editor de texto para el código. El mismo bloc de notas de Windows nos sirve, pero yo os recomiendo el NOTEPADD++. Es simple, bueno y potente, además de estar en español. Descargarlo de este enlace http://notepad-plus.sourceforge.net/es/site.htm .Es la pagina oficial del programa y el mejor sitio para descargarlo.
Si tenéis problemas a la hora de usar este programa, decírmelo y m marco un tutorial sobre su uso y configuración, aunque de verdad que no creo que sea necesario.
Con el editor de texto ya en nuestro disco duro, vamos a bajarnos el interprete de LUA para la PSP. Descárgalo de este enlace http://www.megaupload.com/?d=OVRYZKJL .
Para instalarlo ya sabéis, descomprimir en la raíz de la memory stick y reemplazar cuando os lo pida.
Ahora si que tenemos todo, así que manos a la obra.
Ejecutamos el notepad++ y lo primero que haremos será ir a la pestaña Lenguaje y escoger entre la opciones LUA. Esto hará que nos resalte las palabras reservadas de LUA.
Hecho esto, vamos con el código:
--Activamos USB
System.usbDiskModeActivate()
System.usbDiskModeActivate()
Con esta sentencia activamos el usb para que cuando estemos ejecutando nuestro programa y tengamos el cable usb conectado al PC podamos editar el código sin necesidad de parar la PSP y abrir el archivo. No es obligatorio hacer esto, pero la experiencia me ha demostrado que es muy cómodo y útil.
La frase con los dos guiones delante es un comentario en LUA, es decir, siempre que queramos poner comentarios al código debéis poner – delante de la frase. Si empezáis en otra línea, deberéis poner otros dos – delante de la frase en cuestión.
--Colores
rojo = Color.new(255, 0, 0)
blanco = Color.new(255, 255, 255)
rojo = Color.new(255, 0, 0)
blanco = Color.new(255, 255, 255)
Ahora guardamos en la variable rojo un color en modo RGB que curiosamente será el rojo. Deberéis poner la instrucción así, es decir, color.new no es lo mismo que Color.new y luego el programa no funcionara bien.
--Constantes y Variables
pi = math.atan(1) * 4
time = 0
pi = math.atan(1) * 4
time = 0
Declaramos que la variable pi que en este caso será una constante tendrá el valor de pi = 180. Eso no se consigue diciendo que queremos que valga pi, sino que lo calcularemos con la función matemática math.atan(1), que no otra cosa que el arcotangente de 1 y al resultado lo multiplicamos por 4.
También iniciamos la variable time en 0.
--Bucle principal del programa
while true do
screen:clear()
screen:print(150, 100, "Programando en LUA", blanco)
x = math.sin(pi * 2 / 360 * time)* 150 + 192.5
screen:print(x, 120, "Hola Mundo", rojo)
time = time + 1
if time >= 360 then
time = 0
end
screen.waitVblankStart()
screen.flip()
pad = Controls.read()
if pad:start() then
break
end
end
while true do
screen:clear()
screen:print(150, 100, "Programando en LUA", blanco)
x = math.sin(pi * 2 / 360 * time)* 150 + 192.5
screen:print(x, 120, "Hola Mundo", rojo)
time = time + 1
if time >= 360 then
time = 0
end
screen.waitVblankStart()
screen.flip()
pad = Controls.read()
if pad:start() then
break
end
end
Ahora a explicar este pedazo de tocho de código.
Empezamos con el bucle while que siempre ira en todos nuestros códigos de LUA, diciendo que mientras sea verdad haga lo que sigue a continuación.
Screen:clear() lo que hace es limpiar la pantalla ya que sino tendríamos un pegote de letras todas unas sobre otras y no se leía nada de nada.
Screen:print(150, 100, "Programando en LUA", blanco), lo que le dice al interprete es que imprima en pantalla en la posición x=150 e y=100, la frase Programando en LUA y con color blanco. En LUA el origen de coordenadas se sitúa en la esquina superior izquierda de la pantalla de la PSP tomando desde ese punto las coordenadas.
x = math.sin(pi * 2 / 360 * time)* 150 + 192.5, este código no es mas que una “vacilada” por mi parte, es decir, hará que nuestra variable x tenga un valor seudo aleatorio, es decir, que variara entre dos valores dando al texto sensación de movimiento o de variable “inquieta”. Esto lo conseguimos con la función seno (math.sin).
Podéis jugar con estos valores y ver que pasa y como afecta al código.
Screen:print(x, 120, "Hola Mundo", rojo), esta es el mensaje que variara de posición en la pantalla de la PSP gracias a la coordenada x antes declarada como ”inquieta”. Solo variara en la coordenada x ya que la coordenada y la hemos declarado como 120 y este valor será inamovible a no ser que le digamos lo contrario.
time = time + 1, aquí vamos sumando 1 a la variable time cada vez que el bucle principal pase por este punto.
if time >= 360 then
time = 0
end
En esta sección de código lo que hacemos es poner la variable time a cero si esta llega a 360, mientras no llegue a este valor, esta parte del código no se ejecutara ya que estamos ante una sentencia if, la cual no se ejecuta hasta que lo que viene después del if sea cierto, en este caso que time sea mayor o igual a 360.
screen.waitVblankStart() , esto lo único que hace es una pausa. Más adelante es futuros tutoriales veremos esta función con mas detenimiento, pero por ahora solo debéis saber que hace una pausa.
screen.flip(), esta parte es obligatoria en todo programa hecho en LUA. Cada vez que escribimos algo en LUA, primero se escribe en offscreen o fuera de la pantalla, (resumiendo, que no lo ves) y para verlo debemos pasar el texto a onscreen y de aquí esta sentencia.
pad = Controls.read()
if pad:start() then
break
end
Esta parte de código lo que hace es guardar en la variable pad la pulsación de las teclas hechas de la PSP y si esta pulsación es en esta caso el botón start, entonces reiniciara la aplicación, en este caso nuestro programa.
He puesto este código porque si cambiamos el código mientras este se reproduce en nuestra PSP y después de guardar los cambios apretamos start, se reiniciara y veremos los cambios hechos en el programa.
End , esto no es mas que la finalización de nuestro bucle principal.
Guardamos el programa como script.lua y lo ponemos en la carpeta luaplayer de nuestra PSP, la que no tiene el símbolo %. Debéis ponerlo en esa carpeta y no en ninguna carpeta mas, así conseguimos que nuestro script se ejecute nada mas lanzar LUA.
Ya solo nos queda ejecutar luaplayer y probar nuestro programa. Al hacerlo veréis, si tenéis el usb conectado, que salta el modo usb de la PSP, aprovecharlo para modificar el programa, guardarlo y ver los cambios hechos en la PSP sin tener que reiniciar todo el proceso de apagado, carga y demás cosas. Una vez guardados los cambios, pulsáis start y nuestro script se reiniciara con los nuevos datos.
Bueno, pues hasta aquí el primer tutorial de programación para la PSP con LUA. No es lo mismo que C ni C++, pero para iniciarse y comprender bien esto de la programación, LUA puede ayudar (a mi me ayudo a comprender mejor C, ya que se asemeja un poco).
Me gustaría saber vuestra opinión acerca de este tutorial y si de verdad tiene buena aceptación en el foro y por ende si debo y queréis que continúe con ellos.
Si seguimos, mas adelante aprenderemos a cargar imágenes, a moverlas....... llegando incluso a hacer un mini juego.
Si hay dudas, aquí estoy para lo que sea, no dudéis en preguntarme y si se la respuesta os lo diré encantado.
Para que practiquéis un poco esto de la programación en LUA y para ver a cuantos de verdad le interés el tema, propongo que me hagáis un programa que muestre el texto Hola Mundo pero en vez de variando sobre una línea recta como es nuestro ejemplo, que lo haga en círculos. Como pista os digo que uséis la funcion trigonometrica math.cos.
Spoiler: [ Mostrar ]
Spoiler: [ Ocultar ]
1- INTRODUCCION
Ya estamos de vuelta con el tutorial numero 2 de programación en LUA. Él numero uno ha tenido mejor acogida de la que me esperaba, si os digo la verdad, no creía que esto interesara nadie, pero veo que ya alguno incluso se desmarca de esta línea de tutoriales y sigue su camino propio, lo cual es muy loable y de aplaudir (y no miro a nadie, JEJEJE).
Este tutorial lo he adelantado algo respecto a la salida original que tenia prevista para el mismo. Esto viene provocado por los exámenes de la universidad de estas fechas que un servidor tiene que hacer. Es curioso como funciona esto, pero cuanto más te agobias con algo, más productivo eres, en mi caso, el examen de Estructuras IV me tiene que no paro de hacer cosas, pero el día 14 de febrero todo habrá acabado (de momento hasta que empecemos con los proyectos y demás practicas). Después de este tutorial dejare otro para que lo ojeéis mientras yo me doy un merecido descanso, pero no puedo decir cuando más o menos lo tendréis, es decir, llegaremos hasta el tutorial numero 3 y después me daré unas semanas de descanso.
Aquí os pongo la resolución del primer ejercicio propuesto para que lo hicierais vosotros. No voy a comentar el código porque es casi idéntico al del primer tutorial, pero si alguien tiene alguna duda, que pregunte y se la resuelvo encantado.
http://rapidshare.com/files/1351924...suelto.rar.html
Aquí tenéis un enlace a un pack de utilidades para nuestros programas en LUA. El pack consta de un programa con el cual crear el código RGB para poner colores en el código de vuestro programa LUA. Este programa es el DaggothColourCreator LUA, que por si teneis dudas de su autor, es Daggoth. El otro programa del pack es una utilidad para conocer las coordenadas de un punto en la pantalla de muy útil para centrar texto, imágenes pequeñas, etc..... Este programa se llama FindCLUAv11. Todas estas utilidades son muy fáciles de usar y de instalar. Los dos programas están hechos en LUA, así que podéis ver el código si tenéis curiosidad en ver como funcionan.
Para instalarlos tan solo debéis descomprimir el rar en la raíz de la PSP y decirle que si a sobrescribir cuando os lo pida. Por defecto las aplicaciones se instalaran en la carpeta GAME, ya que es ahí donde tengo yo puesta mi LUA Player. Si vosotros lo tenéis en GAME150, tan solo tenéis que copiar la carpeta que acabamos de descomprimir en GAME en GAME150. Si tenéis dudas o problemas con la instalación, decírmelo que estoy aquí para ayudar.
http://www.megaupload.com/?d=KRFAYISG
En este tutorial vamos a aprender que son y como se usan las funciones en LUA. Por ultimo, vamos a hacer un programa que según se pulse un botón de <st1>la PSP</st1>, mostrara un texto por pantalla donde indicara que botón se pulso. Este texto se mostrara gracias a una función hecha para tal efecto
Pues visto lo visto, vamos a comenzar:
2- FUNCIONES
Las funciones en LUA al igual que en otros lenguajes de programación son parte muy importante de los programas debido a que nos permiten tener un código mucho más limpio que sino usáramos estas. Es cierto que no son ni obligatorias ni imprescindibles pero dan mucha claridad al codigo y facilidad a la hora de programar. Declarar una función en nuestro código es como tener nuestro propio comando en LUA, es mas, teniendo una buena librería de funciones en LUA guardadas en un archivo de texto nos hará terminar nuestro programa mas rápidamente.
Veamos como se declara una función en LUA:
Function nombreFuncion()
(código para ejecutar en la función.
Se pueden usar múltiples líneas)
end
Este seria el esquema para declarar una función en LUA, pero veamos mas claramente con un ejemplo como seria:
function imprimirMensaje()
screen:print(100,100, "¡Esta es mi primera función en LUA!")
end
Con la función declarada, para mostrar este mensaje en un programa tendríamos que llamar a la función en cualquier parte del código. Para usar la función anterior , haríamos lo siguiente:
imprimirMensaje()
Esto ejecutará el código que contiene la función que hemos creado antes. ¡Esta es mi primera función en LUA! aparecerá en la pantalla en las coordenada X = 100 e Y = 100 al llamar a imprimirMensage().
Cuando empieces a crear programas más complejos o juegos usarás mucho las funciones y como ya he dicho antes, tener una librería de funciones en LUA agilizara mucho mas la tarea de programar. Usar llamadas a funciones dentro del bucle principal hará que tu código sea muy limpio (gana en claridad y facilidad de programación) porque con solo usar una línea de código haremos ejecutarse varias líneas de código que nuestra función tenga.
Las funciones también pueden devolver un valor. Esto se hace metiendo argumentos entre los paréntesis de la función al ser declarada. Veamos un ejemplo de función que use dos números y devuelva su diferencia:
function restaNumeros(a, b)
resta = a - b
return resta
end
Como ves hemos declarado dos argumentos en nuestra función, en este caso a y b. Podríamos haber usado números en vez de letras pero como la función restará dos números, el código quedara más legible así. Como vamos a restar dos números, necesitamos dos variables para almacenarlos. De igual manera si necesitáramos más variables, las usaríamos igual en nuestra función, pero tienen que ir separadas por comas. Dentro de la función hemos creado una variable llamada resta a la que asignamos el valor de restar las dos variables, en este caso a y b. Tenemos también el comando return, que le dice a la función que estamos devolviendo un valor una vez que salimos de ella. En este caso el valor que estamos devolviendo es el de la variable resta.
Ahora veamos como podemos usar esta función en nuestro programa:
screen:print(100,100,restaNumeros(6,5), verde)
Esto mostrará el resultado de nuestra función en pantalla, es decir, imprimirá 1 (resta de 6 y 5) en las coordenadas X = 100 e Y = 100. Fíjate que usamos números cuando llamamos a la función. Usamos 6 y 5 en este ejemplo, de igual manera podrías haber usado otros números e incluso mas adelante veremos como introducir nosotros esos números por teclado a la PSP. Esto asigna el valor, la variable a y el valor 5 ab. En la función declarada antes, cada vez que usamos a o b, esas variables serán reemplazadas por los números que hemos puesto. Por lo tanto, en nuestra función cuando decimos resta = a - b, esto resuelve resta = 6 - 5. Se asignará, por lo tanto, el valor 1 a la variable resta y se devolverá al comando print, mostrándose por pantalla.
También podemos almacenar la información en una variable si nuestro programa así lo requiriera. También podemos no usarla si no la necesitamos en ese momento, o podemos reutilizarla tantas veces como queramos sin tener que recalcular la función completa.
Veamos como hacerlo:
Total = restaNumeros(6,5)
Esto almacenará el valor devuelto por nuestra función, la resta de dos números, en la variable Total, por lo que valdrá 1.
Como veis las funciones son de mucha utilidad en cualquier lenguaje de programación y en LUA no podrian ser menos. Podemos hacer nuestras funciones tan complejas como queramos y con la cantidad de líneas de código que queramos, o más bien, que necesite nuestra función para realizar la tarea deseada.
Con esto acabamos las funciones en LUA, solo decir que estas se suelen escribir en el código de nuestro programa delante del bucle principal para tener un rápido acceso de lecturas a ellas cuando vemos nuestro código. Esto no es por narices así, cada uno las declara donde quiera, pero desde mi corta experiencia en LUA os recomiendo hacerlo así por la rapidez a la hora de encontrar la función buscada.
3- PROGRAMANDO: LECTURA DE PULSACIONES
Una vez vista la teoría vamos a ponerlo en practica. Pero antes voy a explicar que es lo que nuestro programa va a hacer.
El fin de este tutorial es ver, comprender y aprender a usar las funciones en LUA, y para ello nuestro programa usara una función para imprimir texto en pantalla. Para este ejemplo se podría haber hecho sin usar funciones , ya que el código no es muy extenso y no tiene mucho sentido hacerlo así, pero para aprender a usar las funciones lo haremos de esta manera.
El programa imprimirá un texto diferente cada vez que pulsemos un botón en la PSP. Este la PSP. Este texto ira relacionado con el botón pulsado de manera que nos imprimirá que botón hemos pulsado, es decir, mostrara “Has pulsado el botón X” si pulsamos la X en LA PSP, y así con los demás botones a excepción del botón Start que lo usaremos para reiniciar el programa o para salir al lowser del interprete de LUA según donde pongamos el programa.
La pulsación de teclas en la PSP podría haber sido un tutorial aparte, pero e desechado esta opción por ser poco extensa a la hora de redactar otro tutorial, por lo que en este tutorial a parte de las funciones vamos a ver también el modo de detectar que tecla se ha pulsado en la PSP y obrar en consecuencia a dicha pulsación.
Pues vamos haya:
--USB Mode en ON<o></o>
System.usbDiskModeActivate()
Comenzamos activando el modo USB para poder editar el código del programa sin tener que apagar LA la PSP y volver a iniciar él interprete de LUA. Como ya dije en el tutorial anterior, esto no es obligatorio ni mucho menos habitual ponerlo, pero es muy cómodo a la hora de editar el código directamente y no tener que apagar la PSP y reiniciar todo el proceso.
--Colores
blanco = Color.new(255, 255, 255)
rojo = Color.new(255, 0, 0)
verde = Color.new(0, 255, 0)
azul = Color.new(0, 0, 255)
Declaramos los colores a usar en el programa. Esto es fácil y ya lo vimos e el tutorial anterior, pero por si casa alguno no lo leyó o no lo recuerda, decir que los números que van entre paréntesis representan el código del color en formato RGB, es decir, red – green – blue (rojo – verde - azul), y la función Color.new creara el color correspondiente al código indicado entre paréntesis y lo almacenara en la variable que aparece delante del signo igual.
--función para leer la pulsación hecha en al PSP
function LeerPulsacion ()
pad = Controls.read()
if pad:cross() then
screen:print(135, 120, "Has pulsado el botón Equis", blanco
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:circle() then
screen:print(135, 120, "Has pulsado el botón Circulo", blanco)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:triangle() then
screen:print(135, 120, "Has pulsado el botón Triangulo", blanco)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:square() then
screen:print(135, 120, "Has pulsado el botón Cuadrado", blanco)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:l() then
screen:print(150, 120, "Has pulsado el botón L", rojo)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:r() then
screen:print(150, 120, "Has pulsado el botón R", rojo)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:up() then
screen:print(125, 120, "Has pulsado el botón Arriba", verde)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:down() then
screen:print(125, 120, "Has pulsado el botón Abajo", verde)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:left() then
screen:print(125, 120, "Has pulsado el botón Izquierda", verde)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:right() then
screen:print(125, 120, "Has pulsado el botón Derecha", verde)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
if pad:select() then
screen:print(135, 120, "Has pulsado el botón Select", azul)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
end
Aquí tenemos el cometido de este tutorial, es decir, la función de marras. Voy a explicar solo una parte ya que si os dais cuenta, todo es igual salvo la lectura del botón pulsado. Para ello voy a poner el principio de la función:
function LeerPulsacion ()
pad = Controls.read()
if pad:cross() then
screen:print(135, 120, "Has pulsado el botón Equis", blanco)
screen.flip()
screen.waitVblankStart()
screen.flip()
end
Comenzamos declarando que vamos a definir una función y le damos un nombre a esta, en este caso la función la llamamos LeerPulsacion. La puedes llamar como quieras, eso da igual.
Seguimos Controls.read(), que lo que hace es leer la pulsación realizada en <st1>la PSP</st1> y este valor lo guarda en la variable pad.
A continuación lo que hace es realizar una serie de comparaciones de la variable pad para ver que botón de la PSP fue pulsado. Esto lo hacemos con la función IF – THEN, es decir, SÍ – ENTONCES. Esta función compara una expresión y si es verdadera entra en la misma y ejecuta el código declarado, si no es verdadera, es decir, si es falsa, no entra en la función y salta a la siguiente línea de código que va después del fin de la comparación en la que no entro. En nuestro código arriba puesto, compara si pad = cross, es decir, si pad es igual a la tecla X, que es igual ejecuta el código a continuación de esta comparación, que no es igual, se lo salta y sigue después del end. Cuando es verdadera la comparación, lo que hace el código es imprimir en pantalla en las coordenadas X = 135 e Y = 120 la frase Has pulsado el botón Equis en color blanco. A continuación pone el offscreen de la pantalla en on para poder ver lo impreso en esta, hace una pausa con la expresión screen.waitVblankStart() y termina otra vez poniendo el offscreen de la pantalla a off. ¿Porque volvemos a poner el offscren en off?, probar a ejecutar el código sin este segundo screen.flip y veréis porque hacemos esto. El código termina con el fin de la comparación.
--Bucle principal del programa
while true do
screen:clear()
[COLOR=RED]screen:print(150, 100, "LECTURA DE PULSACIONES", blanco)COLOR]
screen.flip()
LeerPulsacion ()
if pad:start() then
break
end
end
La ultima parte del código es el bucle principal. En este lo que hacemos es primero de todo limpiar la pantalla, luego escribir en pantalla LECTURA DE PULSACIONES en blanco, ver lo escrito poniendo el offscreen a on y llamar a nuestra función LeerPulsacion. Cuado llega a esta parte y llama a la función, salta la ejecución hasta el código de la función, la ejecuta y realiza las acciones descritas en esta y le devuelve el control al bucle principal, el cual continua después de la llamada a la función. El bucle sigue con una comparación en la cual comprueba si pad tiene almacenado el valor del botón Start, si es cierta esta comparación, ejecutara break que lo que hace es reiniciar nuestro programa o devolvernos al lowser de LUA en función desde donde el código lo hayamos ejecutado. Muchos os preguntareis, ¿y porque carajo no pones esta comparación con las demás en la función?, pues es bien fácil, el comando break necesita de un bucle al cual poder romper, break, y si lo ponemos en la función al no encontrar este bucle dentro de la misma, el código falla y no se ejecuta nada de nada porque da un error de programación, de ahí que lo coloquemos en el bucle principal. El bucle termina con el end de turno para cerrar dicho bucle.
Aquí os pongo el enlace al código completo del programa aquí explicado.
http://rapidshare.com/files/13519516/Programa_2.rar.html
Bueno, pues hasta aquí el segundo tutorial de programación para la PSP con LUA, pero antes voy a explicar algo. En el otro tutorial me olvide de explicar el lanzamiento de código desde él interprete de LUA. A la hora de ejecutar el código lo podemos hacer de dos formas, es decir, si queremos que nada mas lanzar luaplayer desde la PSP se ejecute nuestro programa, tan solo debemos guardar el código como SCRIPT.LUA y ponerlo en la carpeta luaplayer, la que no tiene el símbolo %. Si por el contrario no queremos hacer esto, sino que al lanzar luaplayer queremos que se ejecute este programa y luego nosotros podamos elegir que aplicación LUA lanzar, tenemos que guardar el código como INDEX.LUA y ponerlo en una carpeta con el nombre que queramos, ya sea pepito o programa1, eso da igual, pero lo que si tenemos que hacer es meter esta carpeta en la carpeta luaplayer/aplications y así cuando lancemos el interprete, nos mostrara el llamado lowser de LUA que no es otra cosa que una especie de explorador de las carpetas metidas en la carpeta aplications y así podremos lanzar la aplicación que queramos tan solo bajando hasta esta y apretando el botón circulo.
Esto no es mas que una tontería, pero no lo explique en su momento y produce efectos distintos en nuestro código en función desde donde lo ejecutemos
Si en nuestro código esta la opción de que al pulsar start o cualquier botón, el programa pare su ejecución, si el código esta en la carpeta luaplayer lo que hará es reiniciar el programa pero no saldrá de este, y si el código esta en una carpeta metido dentro de la carpeta aplications, lo que hará será salir al lowser y detener la aplicación del programa.
Explicado esto, ya depende de vosotros donde colocar el programa para tener un efecto u otro.
Si hay dudas, aquí estoy para lo que sea, no dudéis en preguntarme y si sé la respuesta os lo diré encantado.
Para continuar con la metodología del tutorial anterior, esta vez me vais a hacer un ejercicio en él cual si pulsamos el botón X nos sume dos números cualquiera previamente decididos por nosotros, y si pulsamos el botón O que nos reste estos dos mismos números. Deberá mostrar por pantalla un texto que diga Sumados _ y _ , donde los _ son los números que tu le digas, o bien Restados _ y _, y que ponga debajo de esta frase otra con el resultado de la suma o la resta.
Es fácil, así que a darle al coco.
____________





































