05. Utilizar el teclado Danzel en Lua.

Tutoriales Avanzados Homebrewes

Hace tiempo Cancan porto el teclado Danzel de C a Lua y, desde entonces, tenia pensado sacar un tutorial para aprender a usar este magni­fico 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 quedari­a bastante desordenado meterlas todas en la rai­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, 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 ti­pica 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 vaci­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 codigo lo he puesto completo y ahora explico li­nea a li­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 tendran ningun problema con esto. Con teclado:Display() haremos que se muestre en pantalla nuestro teclado que ya habi­amos 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 si­mbolos 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 lei­do del teclado y a continuacion guardo en texto su conversion a caracter. Me explico, con la instruccion string.char(caracter) consigo convertir ese numero lei­do por teclado en una letra, un numero del 0 al 9 o un si­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 solo guardari­a el ultimo caracter al que la igualaras y se perderi­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 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.

ELeNDeR 2oo6 

4.5
Tu voto: Ninguno Votos totales: 4.5 (16 votos)

Anuncios Google

Comentarios

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.

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.

Imagen de pucelano

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.

Imagen de ELeNDeR

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.

Imagen de Unicorn

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

Imagen de Unicorn

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.

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.