Hace tiempo Cancan porto el teclado Danzel de C a Lua y, desde entonces, tenia pensado sacar un tutorial para aprender a usar este magnifico teclado. Para quienes no lo conozcais es el que usa el AFKIM y, en su ultima version, Danzel libero el codigo favoreciendo la portabilidad a Lua. Las posibilidades son muchas, por ejemplo, puedes usarlo para escribir el nombre de quien haya logrado un récord en tu juego. Muchos opinan que es mejor que el propio teclado que trae el XMB de la PsP (ése que usas para ponerle en nombre a tu consola) y yo soy uno de ellos, por eso vamos alla.
Para empezar debo decir que en esta ocasion no voy a subir el script.lua sino que voy a subir una carpeta (Danzel) que contiene el index.lua (es el archivo que se usa cuando vas a lanzarlo a través del Lowser), una subcarpeta (Teclado) con el archivo danzeff.lua y otra subcarpeta (danzeff) que contiene todas las imagenes. Prefiero usar este método porque al ser muchos archivos y carpetas quedaria bastante desordenado meterlas todas en la raiz del luaplayer, por eso vamos a usar el Lowser para lanzar el programa y meteremos la carpeta Danzel dentro de luaplayer/Applications.
El archivo danzeff.lua es el teclado portado desde C, asi que no voy a explicar nada de eso. Solo comentar que he variado la ruta de las imagenes que carga para que coincida con la estructura de carpetas que vamos a utilizar. Para los mas expertos, decir que el teclado es una clase, con su definicion y sus métodos, pero eso ya es otra historia.
Por lo tanto nos centramos en index.lua, que es ahà donde vamos a crear nuestro propio codigo.
En primer lugar tenemos la ya tipica creacion de colores RGB:
-- Creamos los colores que vamos a utilizar
blanco = Color.new(255,255,255)
verde = Color.new(0,255,0)
Ahora llamamos al archivo Lua que crea el teclado:
-- Llamamos al archivo danzeff.lua
dofile("./Teclado/danzeff.lua")
Lo siguiente es crear una nueva instancia de teclado e inicializarlo en unas coordenadas:
-- Creamos un nuevo teclado
teclado = Danzeff:New()
-- Inicializamos el nuevo teclado en esas coordenadas
teclado:Init(330,122)
A continuacion creamos una variable que almacenara lo que vayamos escribiendo con el teclado:
-- Creamos una variable texto vacia texto =""
Ahora empezamos con el bucle principal:
-- Bucle principal
while true do
screen:clear()
pad = Controls.read()
teclado:Display()
caracter = teclado:Input(pad)
if pad ~= oldpad and caracter ~= 0 then
screen:print(130,130,caracter,blanco)
texto = texto .. string.char(caracter)
end
screen:print(100,100,texto,verde)
oldpad = pad
screen.flip()
screen.waitVblankStart()
end
Como es poco codigo lo he puesto completo y ahora explico linea a linea. Con el While creamos nuestro bucle infinito, luego limpiamos la pantalla y hacemos una lectura de botones. Para los que hayan seguido mis tutoriales no tendran ningun problema con esto. Con teclado:Display() haremos que se muestre en pantalla nuestro teclado que ya habiamos creado e inicializado anteriormente. En la variable caracter guardamos un numero ascii del caracter que hemos pulsado en el teclado. Expliquemos esto un poco mas, con el teclado ya visible, usando el stick analogico seleccionamos las letras, numeros o simbolos que queremos escribir, pues cada seleccion nos devuelve un numero perteneciente a la tabla ascii (para los que no sepan qué es, usad Google) y queda almacenado en caracter. En el if comprobamos que no sea la misma pulsacion de tecla y que caracter no valga cero. Si no hacemos la comprobacion de repeticion de tecla ocurre que al pulsar cualquier tecla en vez de aparecer una sola vez el caracter elegido aparece muchas hasta que soltemos el boton. Y el valor cero de caracter quiere decir que no se pulsa ninguna tecla, por lo tanto hay que desecharlo. Si entra en el if primero le digo que muestre por pantalla el numero ascii en color blanco que ha leido del teclado y a continuacion guardo en texto su conversion a caracter. Me explico, con la instruccion string.char(caracter) consigo convertir ese numero leido por teclado en una letra, un numero del 0 al 9 o un simbolo (punto, coma, etc), luego lo concateno a la variable texto para ir formando el texto que queremos escribir. Si no lo concatenases, la variable texto solo guardaria el ultimo caracter al que la igualaras y se perderian las anteriores lecturas. Fuera del if mostramos el texto en color verde y terminamos el bucle principal como solemos.
Como podéis comprobar el programa en si es de lo mas sencillo, pero creo que cuanto mas sencillo mejor se entiende la forma de utilizar el teclado Danzel en Lua. Espero que os sea util y que lo utilicéis en vuestros programas y juegos. Saludos.
Comentarios
Una pregunta
Cuando meto el programa en la psp, la tecla "del" no borra sino que escribe un circulo, y tambien los botones de direccion...
La cuestion es: ¿que caracter hace referencia a del?
es decir, que se guarda en la variable caracter cuando se pulsa la tecla "del"?
...
caracter = teclado:Input(pad)
if pad ~= oldpad and caracter ~= 0 then
screen:print(130,130,caracter,blanco)
texto = texto .. string.char(caracter)
...
y otra cosa, como se puede borrar de una cadena un caracter?
Gracias de antemano
correccion teclado danzeff
creo que ya es un poco tarde para contestar pero detodos modos a alguien le va a servir... soy nuevo en esto y he encontrado como hacer que funcione bien ( hacer que borre) te pongo el codigo...
screen:clear()
pad = Controls.read()
teclado:Display()
caracter = teclado:Input(pad)
if pad ~= oldpad and caracter ~= 0 then
if caracter == string.byte('\009') then
tamtexto=string.len(texto)
texto=string.sub(texto,0,tamtexto-1)
else
screen:print(130,130,caracter,blanco)
texto = texto .. string.char(caracter)
end
end
screen:print(100,100,texto,verde)
oldpad = pad
screen.flip()
screen.waitVblankStart()
Solo le tienes que poner que si pone el caracter que resulta de presionar del borre un caracter.
Te explico como funciona el
Te explico como funciona el teclado.
Al pulsar "del", es decir al pulsar "triangulo" sin mover el analogico, se borra el caracter que esta justo debajo del cursor.
Si pulsas "flecha arriba" se borra el caracter que esta justo antes del cursor.
A mi no me sale ese circulo al pulsar "del". Tampoco se como funciona ese teclado internamente, ya que no le he analizado a fondo.
Espero haberte ayudado en algo.
Un saludo.
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.
Me siento especialmente
Me siento especialmente satisfecho con este tuto porque es totalmente mÃo y porque le he echado tiempo hasta que conseguà que funcionara.
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.
Wow...
que ganas tengo de que haya en BETA 3 o 4 editores constantes, para ponerme a practicar todos tus tutos, y empezar a producir Homebrew made in BETA ;-)
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.
Para recibir ayuda más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda revisar el Manual del perfecto forero y las Normas de la Comunidad.
¿Vas a hacer homebrew? Tio
¿Vas a hacer homebrew? Tio tengo que buscar gente que mande noticias, me encantaria tener competencia en Beta xDD
jajaja
me encantaria estar en BETA para trastear con tutos complicados, o para programar cosillas. Pero para eso, como tu dices, necesitamos unos cuantos editores. Con que los que tenemos subieran una cada dos dias, iriamos sobrados. Pero nos las "comemos" todas de momento entre Rada, Elender, Saga jot4 (de vacaciones) y yo. Tenemos unos cuantos betatesters aprendiendo a subir, a ver si finalizan con exito el proceso de aprendizaje en foros privados ;-)
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.
Para recibir ayuda más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda revisar el Manual del perfecto forero y las Normas de la Comunidad.