Anuncios Google

PrintLib

AplicacionesLUA Playeres

vFinal

Os presento una librería para programadores de LuaDev que les vendrá como anillo al dedo. Se trata de una nueva librería creada por uno de los moderadores de PSP, Rober Galarga. La librería sirve para hacer un print pero de una manera muy especial: imprimiendo imagenes que corresponden a cada caracter, es decir: asignas una imagen (de una letra en un tipo de fuente, icono, etc) y al hacer un print de dicho string, se blitea la imagen.

Autor: Rober Galarga.

Descripción:

PrintLib es una librería que nos permitirá imprimir mensajes en pantalla, con una fuente personalizada que será cargada como un sprite.

Nota del autor: "No pretendo sustituir el print nativo de LuaDEV, sólo quiero apoyarlo ;)".

Características:

  • Puede imprimir horizontal y verticalmente.
  • Admite transparencia.
  • La separación entre caracteres se puede modificar, incluso en una misma frase.
  • Podemos tener cargados varios sprites con fuentes distintas.
  • Siguiendo la plantilla que está más abajo, y por default, contamos con 100 caracteres, pero se pueden agregar o quitar caracteres, dependiendo de las necesidades del usuario.
  • Se puede especificar color para la fuente.
  • Posibilidad de cambiar el tamaño de la fuente.
  • Ligera, sólo 21 líneas.

Esos caracteres vienen cargados por default en PrintLib, así que lo más recomendable es seguir ese sprite, a manera de plantilla. El tamaño no importa, pueden tener un sprite de diferentes filas, columnas y tamaño que el del ejemplo, pero si siguen el orden indicado funcionará. El tamaño total DEBE ser de 512*512 pixeles máximo, de lo contrario obtendrán cosas raras al escribir.

Modo de uso:

Primero cargamos la librería, así como el sprite que usaremos como fuente:

dofile("PrintLib.lua")
   fuente = image.loadsprite("la fuente.png",ancho,alto)
--[[
   ancho,alto se refieren a las dimensiones de los caracteres en nuestro sprite
   y obviamente dependen del tamaño que los hicimos.
   En el ejemplo que dejé, los caracteres son de 10x15 pixeles
]]

Ahora, si necesitamos los servicios de la librería, usamos su función principal:

print(fuente,x,y,texto,separacion,visibilidad,escalado,color,modo_vertical)

Donde:

  • fuente: Es el sprite que cargamos anteriormente.
  • x,y: Son las coordenadas donde deseamos imprimir el texto.
  • texto: Pues eso, el texto que vamos a imprimir.
  • separacion: La separación entre un caracter y otro en pixeles (se puede usar el ancho de los caracteres, o se puede aumentar o disminuir para lograr algún efecto)
  • visibilidad: Porcentaje de visibilidad del texto, para imprimir aplicando transparencia. 100 = Sin transparencia; 0 = totalmente transparente. Si se omite el argumento, se imprime sintransparencia.
  • escalado: Para modificar el tamaño de la fuente. Se maneja como porcentaje, de manera que si especificamos 50, se imprimirá la fuente al 50% de su tamaño original (la mitad). Omitiéndolo, se imprime la fuente en su tamaño original.
  • color: color para nuestra fuente. Si se omite se imprime la fuente en su color original.
  • modo_vertical: Especificando true, el texto se imprime verticalmente, de arriba hacia abajo. Si se omite o se especifica false, se imprime horizontalmente.

Nota: Para que el coloreado surta efecto, la fuente debe ser de color blanco.

Funciones Adicionales

Añadir nuevos caracteres

Estoy seguro que al ver el sprite de ejemplo, se dieron cuenta de que podrían faltar caracteres (como por ejemplo los signos ¿,¡, o los caracteres que usan los españoles). No hay por qué alarmarse, ni entrar en pánico que se soluciona sencillo.
PrintLib incluye una función para añadir nuevos caracteres. La forma más sencilla de hacerlo, es añadiendo los caracteres que nos hagan falta al sprite, después de los que estaban ya en él.

Hecho eso, toca definir el nuevo caracter, usando la función char.add (disponible cuando cargamos la librería):

char.add(caracter,posicion)

  • caracter: es el nuevo caracter a agregar (si son varios, los añadimos uno por uno). Se especifica como string.
  • posicion: Se refiere al lugar que ocupa el caracter en el sprite. En LuaDEV, los cuadros de un sprite se empiezan a contar desde el cero, de tal manera que el espacio después de la Ñ correspondería al 102

Entonces, para añadir el símbolo ¿ después de la Ñ en el sprite de ejemplo, haríamos esto:

char.add("¿",102)

Cuidado con substituir caracteres ya definidos, podrían obtener una ensalada de letras xD

Usando otros mapas de caracteres

No necesariamente debemos usar el mapeo mostrado en el sprite de ejemplo, podemos definir nuestro propio mapa de caracteres.
Antes de eso, debemos limpiar el mapeo actual, usando otra función incluida en la librería:

char.clean()

Con eso preparamos la librería para definir el nuevo mapa de caracteres, restándonos la tarea de añadirlos como se explicó anteriormente. Esta función es especialmente útil si tenemos un sprite con pocos caracteres, resulta más práctico cargar sólo los que vamos a usar en determinado momento, con el subsecuente ahorro de RAM ;)

En caso de querer volver al mapeo por defecto, usamos:

char.reload()

Y podremos volver a usar sin problemas la plantilla de ejemplo.

Definir la separación de las letras

char.setH(tabla,separacion)
 
char.setV(tabla,separacion)

Donde:

  • setH es para definir separación independiente para imprimir horizontalmente.
  • setV lo mismo, pero vertical.
  • tabla, una tabla conteniendo los caracteres para los que queremos separación diferente.
  • separacion, eso mismo, la separación que deseamos para los caracteres que definimos en la tabla. Si se omite, se tomará la mitad de la separación indicada al momento de usar la función print.

setH y setV pueden ser llamadas en cualquier momento, cuantas veces lo deseemos (para modificar la separación si hiciera falta, por ejemplo), y su efecto es independiente (si definimos separación horizontal, no afectará cuando imprimamos verticalmente y viceversa).

Ejemplo de esta función:

setH({"I","í","i","l"})  --Defino separación diferente para los caracteres I,í,i,l. Como no especifiqué separación, se usará la mitad de la indicada en el print.
    print(small,10,10,"Iluminando el sendero",10)  --Imprime con la mitad de la separación para los caracteres que indiqué.
  setH({"I","í","i","l"},7)  --Defino 7 pixeles de separación para los caracteres I,í,i,l.
    print(small,10,10,"Iluminando el sendero",10)  --Imprime con 7 pixeles de separación para los caracteres que indiqué

Agradecimientos del autor:

Agradezco a Moikop por su ayuda para subsanar un par de bugs, a Chimecho por las ideas para el coloreado, a DeViaNTe por crear LuaDEV y a Dovemac por las ideas en general.

*Captura de PrintLib en acción. Podéis observar la función de separación.

Descargar PrintLib vFinal  (Sólo Usuarios Registrados).

4.15942
Tu voto: Ninguno Votos totales: 4.2 (69 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.
Imagen de Tutos14

Me viene de Lujo ;) Gracias

Me viene de Lujo ;)

Gracias por la libreria

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.