Bennu Game Development

Foros en Español => Recursos => Topic started by: Erkosone on June 02, 2013, 05:23:25 PM

Title: [CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 02, 2013, 05:23:25 PM
Hola gente, como muchos sabrán hace años se publicó en el número 8 de la revista DivMania una función llamada Vital Input la cual hasta día de hoy creo que no ha sido superada, esta función permitía en Div/Div2 entrar de manera correcta texto por teclado.


Lo que os comparto es la evolución de esta maravillosa función actualizada por mi, esto es lo que permite:


- Entrada de caracteres en MAYUSCULAS.
- Entrada de caracteres en minusculas.
- Entrada de números.
- Entrada de simbolos.
- Acentos.
- Acentos invertidos.
- Dieresis.
- Detecta interacción con teclas de cursor LEFT RIGHT permitiendo desplazarnos por el texto introducido.
- Detecta interacción con teclas especiales INICIO - FIN - SUPRIMIR - BACKSPACE.
- Totalmente controlada por timers para un correcto funcionamiento.


Es mi pequeño granito de arena a este campo tan dejado de la mano de dios XD.. espero que os sea utilidad  8)


NOTA: No es una copiada de la vital input XD.. el que la conozca verá que el código de esta nueva función está bastante mejor organizado y funciona de una forma completamente distinta, eso si, he mantenido el sistema de array de chars y array de ints por el rendimiento, en su día me pareció algo muy bien hecho y he decidido usar el mismo tipo de arrays para aumentar el performance al trabajar directamente con datos tipo INT en las comprobaciones.


Un saludo gente!
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: laghengar on June 02, 2013, 07:25:29 PM
Muchísimas gracias, viene que ni pintado. Karma.
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Outlaw on June 02, 2013, 07:39:01 PM
Gracias Erko! Creo que me va a ser muy útil! Saludos!
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 02, 2013, 07:47:54 PM
Nada nada.. no se merecen jeje.. hay que compartir!
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: SplinterGU on June 02, 2013, 09:07:23 PM
genial...
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 03, 2013, 05:15:54 AM
Se me olvidó comentar..


Esta función no contiene código bloqueante que pueda interferir en la continua ejecución de cualquier aplicación o juego programada en bennuGD, así que si alguien necesita que no pare la ejecución del programa mientras se captura texto por teclado simplemente cambiar FUNCTION por PROCESS y ya está, se podrá ejecutar la aplicación normalmente y al mismo tiempo capturar desde el "proceso" keyboardInput() lo entrado por teclado.





Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 03, 2013, 05:36:13 AM
He resubido el archivo, tenía un bug en el manejo de la tecla SUPR, lo que no se es como borrar el anterior..


El bueno es el que pone "fixed", algún administrador puede eliminar el anterior archivo??
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 05, 2013, 02:19:50 PM
Resubido de nuevo..
Había otro bug en los acentos, la ultima vocal "u" no se acentuaba.. ahora ya está todo arreglado.
A disfrutarla.
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: master on June 05, 2013, 04:08:03 PM
supongo que será porque uso ubuntu, pero a mí no me toma ninguno de los caracteres acentuados (ÁÉÍÓÚáéíóú), acentos invertidos(ÀÈÌÒÙàèìòù) diéresis (ÄËÏÖÜäëïöü) ni tampoco el circunflejo (ÂÊÎÔûâêîôû), tampoco me toma '¡+ḉ-?¿*Ç_ tampoco la ñÑ , el modificador Alt+(cualquier tecla) no me funciona.

Todos los demás como números, shift+número y letras mayúsculas y minúsculas si funcionan (también funcionan ,.;:).

De todo esto me surge una duda, ¿Como imprimes los caracteres ÁÍÓÚ si la fuente del sistema no tiene esos caracteres?
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 06, 2013, 04:29:26 AM
y quien ha dicho que la fuente de sistema no tiene esos chars? claro que los tiene, las que no los tienen bien colocados por que usan otra codificación de teclado son las fuentes compatibles con div que desgraciadamente no funcionan bien, la verdad es que no se si bennuGd tiene algún generador de fuentes para bennu concretamente.


Lo que comentas es bastante raro por que para que no diera problemas el código que dispara los FLAGS de los acentos está escrito con los pseudonimos de los códigos de teclado y no con los códigos directamente, lo hice así para evitar esto mismo.. pero es raro que no funcione.


El código que detecta si se ha pulsado la tecla de acento o dieresis es este, está al inicio del loop:



// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      if( key( _apostrophe ) )
         if( KEY(_L_SHIFT) OR KEY(_R_SHIFT) )
            dieresis = true;
            acento_normal = false;
         else
            acento_normal = true;
         end
      end
      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      if( key( _l_bracket ) )
         acento_invert = true;
      end


Como ves no hay ningún código de teclado directo, uso los nombres de los códigos de teclado que tiene bennu, es raro.. esto puede ser un bug de bennu en Ubuntu con la función KEY() ???
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: master on June 06, 2013, 04:46:03 AM
No tengo idea de porque no funcione.
Pero mencioné lo de las letras ÁÍÓÚ porque se supone que bennu usa una fuente CP437, y precisamente este codepage no tiene esos caracteres, por eso lo comenté.
Supongo que lo que hace es imprimir alguna letra que se parece. Estas son las letras internacionales del CP437

Çç
æÆ
âäàåá
ÄÅ
êëèé
É
ïîìí
ôöòó
Ö
ûùüú
Ü
ÿ
ñÑ

Te adjunto la salida de todos los caracteres desde benugd
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: master on June 11, 2013, 04:19:40 PM
Ya probé tu rutina en en windows, aquí si funciona. Solamente unos detalles:

1) cuando preciono la diagonal del teclado numerico (/), me aparece el signo de menos (-)
2) si presiono mayor que (>) y menor que(<) no aparece nada
3) no puedo escribir vocales con acento circunflejo.
4) cuando intento escribir una vocal mayuscula acentuada, me devuelve la minuscula acentuada.

Este ultimo punto (4), creo que será complicado resolverlo. ya que como mencioné arriba, la fuente por default de bennugd es CP437, y esta solo contiene estas variaciones de mayusculas: ÄÅÉÖÜ.
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 11, 2013, 06:09:13 PM
Vale te comento:


1 - El teclado numérico no está implementado, seguramente falle si pulsas otras teclas también.
2 - Los simbolos < > realmente no recuerdo si están, ahora lo reviso, gracias por el aviso sobre esto ;)
3 - Los acentos circunflejos tampoco los he implementado jeje.. no pensé que los usara nadie, pero los puedo añadir sin problema si hacen falta.
4 - Las vocales mayúsculas no están implementadas pero si hacen falta las puedo incluir también sin problema.


En definitiva, el teclado numérico no está disponible, puede salir cualquier cosa jeje.. pero todo lo demás es muy simple de añadir, me pongo a ello, haber si en un rato puedo resubir la función.
Gracias por el feedback ;)
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 11, 2013, 06:18:10 PM
Circunflejo añadido, sigo con lo siguiente..
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 11, 2013, 06:32:16 PM
Vocales MAYUSCULAS con acentos, acentos invertidos, diéresis y acento circunflejo añadido..  continuo con lo siguiente..
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Erkosone on June 11, 2013, 06:43:15 PM
Algunas mayusculas veo que falla el caracter imprimido pero es culpa de la fuente se bennuGD por que si hago:  write( 0, 10, 10, 3, "E" ); también se imprime un carácter raro.
Ya mas no se puede hacer, voy a colocarlo como un bug para ver si pueden revisarlo en bennu.
En 1 minuto cuelgo la nueva función.


Queda pendiente lo de los simbolos > <..
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: master on June 12, 2013, 09:03:30 PM
Gracias por la libreria.

El problema de las vocales mayusculas acentuadas es de la fuente de bennu, te cuento: Bennugd ocupa la codificación cp850, pero su fuente no es cp850 sino cp437, y siempre ha sido así. Hace como 4 meses  splinter, dcelso y yo nos dimos cuenta de esto. (debido a que había problemas con el FPGeditor al ordenar las letras en el fnt y luego mostrarlas correctamente en bennu)
Supongo que si se utiliza una fuente externa con el flag cp850 funcionara de maravilla.

Karma!
Title: Re:[CODE] KeyboardInput() - Entrada de texto por teclado.
Post by: Futu-block on July 04, 2020, 11:20:00 AM
Hasta ahora no me ha echo falta, lo estoy estudiando a ver que tal...

¿es write_in_map? creo que no, y eso es lo que me interesa