[Funcion msgtext] Una ayudita para los que empiezan

Buenas, este post va dedicado principalmente a los que estan comenzando a programar con las palib teniendo ademas pocos conocimientos sobre programación. Los que ya lleven su tiempo pueden irse a otra parte XD.
Bien, quería mostraros una función que hice pensando precisamente en facilitaros un poco las cosas, sobre todo a los que esteis haciendo algo tipo rpg, como judelco y su zelda ;), ya que esto os pueden venir muy bien.
La función lo que hace es mostrar un mensaje de texto en una zona determinada de la pantalla.

...

[sonrisa] No, no me apedreeis aun, que eso no es todo xD.
Esta funcion utiliza a su vez la funcion PA_TextBox para mostrar mensajes de texto que van apareciendo a la velocidad que queramos, en la parte de la pantalla(s) que queramos y algunos alicientes mas.

He intentado hacerla de la forma mas general posible, para ajustarla como querais, pero esto me ha obligado a contar con muchos parametros a la hora de llamarla. Por ello, la analizaré un poco para que no os tengais que comer el coco a la hora de usarla:

func_msgtexto(u8 pantalla, u8 posicion, s8 color, char *texto, bool modoborrado, float velocidad, float acelerar, bool modo_ace)
Si... unos cuantos parametros nada mas... os dire que teneis que insertar en cada uno:

func_msgtexto(u8 pantalla, <- aqui obviamente teneis que insertar la pantalla donde aparecera el cuadro de texto

u8 posicion, <- aqui su posicion. podeis usar una de las 3 predefinidas: POS_ARRIBA, POS_CENTRO ó POS_ABAJO. tambien podeis poner un valor que sera la coordenada y. no hay que especificar el ancho, puesto que este será toda la pantalla

s8 color, <- aqui el color del texto del mensaje. si poneis -1 no pondrá ningun color, es decir, usara el ultimo que hayais cambiado.

char *texto, <- aqui el texto a pintar, entre comillas "lo que sea". esta funcion no pintara variables. la cantidad maxima de caracteres es de 155 (5 lineas a 31 caracteres cada una)

bool modoborrado, <- aqui se pone la forma que tendra la pantalla de ser borrada una vez leido el texto. si poneis 0 se borrara solo la parte correspondiente al texto que ha escrito la funcion. si poneis 1, ejecutara un PA_ClearTextBg, por lo que si teneis mas texto en pantalla recomiendo usar la opcion 0. en vez de 0 y 1 podeis usar BORRA_TEXTO y BORRA_TODO.

float velocidad, <- aqui va la velocidad con la que ira apareciendo el texto. el numero indicado sera el tiempo que pasará entre letra y letra, por lo que es aconsejable poner valores inferiores a 1. si poneis 0 el texto sera instantaneo

float acelerar, <- aqui teneis una opcion que espero que os guste. se usa en conjunto con la siguiente, e indica una cantidad de tiempo a restarle a la velocidad. por ejemplo, si en velocidad poneis 1 y en acelerar 0.8, cuando se active la aceleracion entre letra y letra no pasara 1 segundo sino 0.2 (1-0.8). bueno, y como se usa esto? pues...

bool modo_ace) <- en este parametro elegimos el modo de acelerar el texto. teneis dos opciones, MODO_NEWPRESS y MODO_HELD. bien, si seleccionais MODO_NEWPRESS y la aceleracion tiene un valo mayor que 0, si pulsais A mientras leeis el texto su velocidad aumentara de la forma que expliqué antes, hasta llegar al final del cuadro de texto. si en acelerar poneis de valor 0, no habra aceleracion. si poneis un valor similar al de velocidad, el texto aparecera instantaneamente al pulsar A. si poneis el MODO_HELD, el texto se vera acelerado de la misma forma, pero no automaticamente hasta llegar al final, sino solo mientras mantengais pulsado el boton A. creo que esto viene muy bien para esos largos dialogos que quiza haya que leer varias veces XD

Creo que la explicacion me ha salido un poco warra, si eso luego lo defino mejor todo xD.
Pues como dije, la funcion la he hecho de forma muy general, de ahi que tenga tantas opciones. Si en tu juego no quieres que el texto se acelere al pulsar el boton (o que lo haga de una sola forma) lo mejor es hacerte una funcion que haga solo eso y no tengas que andar configurandola (esto entre otras cosas).
-No puede especificarse un boton para ir avanzando en el texto, asi que segun la que querais tendreis que editarla antes de incluirla en vuestro juego.
-Tampoco se puede especificar un fondo para el cuadro de texto ni un sprite con un botoncito que indique lo pulses para seguir leyendo. Esto deberá correr de vuestra cuenta.
-Se me olvidaba esto, antes de usarla debeis inicializar texto (PA_InitText) en la pantalla que querais que aparezca el mensaje.

Espero que os venga bien a alguno y, al menos, os hagais una idea de como hacer estas cosillas.
Si teneis alguna duda sobre esto no teneis mas que preguntas. Si veis algun tipo de fallo haced el favor de comunicarmelo ;).

Pues nada, un saludo a todos, me voy al dentista xD!

Adjuntos

Me parece bien, gracias

PD: suerte en el dentista xd
OOOOSstia!!!!

No lo he terminado de leer (solo he leido las 5-6 primeras líneas, pero se de que va). MUCHAS GRACIAS!!!!

Esto si que me va a servir a la hora de leer carteles o hablar con la gente....

GRACIAS [tadoramo]

[plas] [oki]

EDIT: Yo no te deseo suerte, yo te deseo que sea leve el dentista ;)
Gracias .
Cuando sea capaz de llegar a hacer un RPG con PaLib lo necesitaré ^^
Muy buena función, pero lo único, que has puesto que se usen floats... En la NDS las variables de éste tipo(que permiten fracciones, decimales...)van algo lentas...
alexpowerup escribió:Muy buena función, pero lo único, que has puesto que se usen floats... En la NDS las variables de éste tipo(que permiten fracciones, decimales...)van algo lentas...


Yo uso s64 (con esto creo que basta para esta funcion, y sino s128.....) y santas pascuas.....

No se si INT tambien vale....
Buenas, antes que nada decir que me alegro de que os gustara la funcion ;). Hoy he tenido 2 examenes (scripts bash y C con lapiz y papel xD, 3 horitas cada examen nada menos) por eso ayer no estuve mucho tiempo por aqui. Por cierto, me han salido de p.m. :D.

alexpowerup escribió:Muy buena función, pero lo único, que has puesto que se usen floats... En la NDS las variables de éste tipo(que permiten fracciones, decimales...)van algo lentas...


Eso lei en la wiki, aun no he llegado a la parte en la que explican como utilizar las variables de enteros para numeros decimales (debe ser algo asi como con los binarios). Cuando lea la explicacion intentare cambiarlas. De todos modos, yo siempre he pensado que por muy "lento" que sea, mientras no vea que me baja el rendimiento prefiero hacerlo mas comodo para mi. Y pongo lento entre comillas por que será lento respecto a los enteros, pero vamos, que no va a ralentizarte la DS por usarlas.

judelco escribió:Yo uso s64 (con esto creo que basta para esta funcion, y sino s128.....) y santas pascuas.....

No se si INT tambien vale....


Un int es lo mismo que el s32, su rango va desde -2.147.483.648 hasta 2.147.483.647.
Yo creo que con los dos mil millones y pico numeros que puede guardar un s32 no es necesario usar s64 para usar decimales, no creo que vayas a poner tantos xD.

Salu2!

PD: Del dentista salí algo acojonado, me han dicho que me tienen que sacar las muelas del juicio mediante cirujia, porque están saliendo por encima de las otras muelas y como empiecen a empujar me las pueden fracturar... En fin, todo sea por mi salud [+risas].
6 respuestas