![]()
Hace tiempo Cancan portó el teclado Danzel de C a Lua y, desde entonces, tenÃa pensado sacar un tutorial para aprender a usar este magnÃfico teclado. Para quienes no lo conozcáis es el que usa el AFKIM y, en su última versión, Danzel liberó el código 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 allá.
Para empezar debo decir que en esta ocasión 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 imágenes. Prefiero usar este método porque al ser muchos archivos y carpetas quedarÃa bastante desordenado meterlas todas en la raÃz 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, asà que no voy a explicar nada de eso. Sólo comentar que he variado la ruta de las imágenes que carga para que coincida con la estructura de carpetas que vamos a utilizar. Para los más expertos, decir que el teclado es una clase, con su definición 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 código.
En primer lugar tenemos la ya tÃpica creación 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 continuación creamos una variable que almacenará lo que vayamos escribiendo con el teclado:
-- Creamos una variable texto vacÃa
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 código lo he puesto completo y ahora explico lÃnea a lÃnea. 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 tendrán ningún problema con esto. Con teclado:Display() haremos que se muestre en pantalla nuestro teclado que ya habÃamos creado e inicializado anteriormente. En la variable caracter guardamos un número ascii del caracter que hemos pulsado en el teclado. Expliquemos esto un poco más, con el teclado ya visible, usando el stick analógico seleccionamos las letras, números o sÃmbolos que queremos escribir, pues cada selección nos devuelve un número 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 pulsación de tecla y que caracter no valga cero. Si no hacemos la comprobación de repetición de tecla ocurre que al pulsar cualquier tecla en vez de aparecer una sola vez el caracter elegido aparece muchas hasta que soltemos el botón. 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 número ascii en color blanco que ha leÃdo del teclado y a continuación guardo en texto su conversión a caracter. Me explico, con la instrucción string.char(caracter) consigo convertir ese número leÃdo por teclado en una letra, un número del 0 al 9 o un sÃmbolo (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 sólo guardarÃa el último carácter al que la igualaras y se perderÃan 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 sà es de lo más sencillo, pero creo que cuanto más sencillo mejor se entiende la forma de utilizar el teclado Danzel en Lua. Espero que os sea útil 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.
¿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.