Buenas!
Mi duda es si.. existen saltos de linea en Bennu? es decir, algo asi:
string x = "hola, que tal? \r\n yo bien, y tu? \r\n bien";
Lo que resultaría en:
hola, que tal?
yo bien, y tu?
bien
Existe algo parecido en bennu?
Gracias!
no
Las funciones "básicas" de escritura de textos en Bennu (write y write_var) se encargan de escribir los caracteres a partir de un pixel y con cierta alineación, pero siempre dentro de la misma línea.
En su día hice una función que hacía división de palabras activa, a partir de cierto punto se encargaba de preparar otro write que continuaba escribiendo el texto N píxeles debajo de la primera linea, el resultado no estaba nada mal... Pero el algoritmo no era 100% correcto y para palabras demasiado largas daba problemas, es un proyecto que no terminé porque no tenía ningún proyecto en el que darle cabida...
En cualquier caso, lo hice en unas horas, la idea es sencilla, pasas la string a una FUNCTION que tiene un vector de strings donde trocear el texto y luego se encarga de escribirlo. También tenía un vector de IDs de los textos escritos, para poder borrarlos luego.
Mi idea era la siguiente:
en el juego de pokemon, por ejemplo en la pokedex, hago 6 write_var para listar los ataques, y otros 4 o 5 para el resto de datos. Era por usar una sola string con saltos de linea para usar un solo write_var. El problema de string alloc que me salta no se si tendrá que ver con que hago la de dios de write_var, por eso queria reducirlos.
Gracias por la info!
creo que en tu caso te vendría mejor usar write a secas, tienes que guardar un identificador por cada write que hagas, y justo cuando quieras que no se vea tienes que hacer un delete_text por cada identificador que tengas.
Asi deberías de evitar cualquier desbordamiento de textos.
Puedes usar un vector estático para guardar los identificadores siempre y cuando conozcas el masimo de textos que vas a mostrar en pantalla o ponga sun numero muy grande como 100 o 1000
algo como
int id_textos[1000];
...
id_textos[1] = write(0,10,10,0,"hola");
id_textos[2] =write(0,10,40,0,"adios");
...
while(!key(_esc)) frame; end
delete_text(id_textos[1]):
delete_text(id_textos[2]);
windgate se refería a que el se ha hecho una función para automatizar esto mismo que te comento.
que puedes hacerte tu una propia en la que pases el texto como dices tu con \n (ejemplo "hola\nadios"), luego usar split para sacar varios strings usando como separado "\n" y hacer un write por cada texto del split.
sería algo como create tu propia funcion mi_write(font, x_pos,y_pos, text) que encapsule varios write_vars y devuelva el vector de id_s para poder luego hacer un mi_delete_text(vector_de_ids) y poder eliminarlos con varios delete_text.