División de palabras activa

Started by Windgate, May 26, 2011, 12:09:53 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Hola amiguitos, siento no pasar por aquí tan a menudo como antes... Prácticamente lo hago a diario, pero empieza a haber alguna cosa que se me escapa y no comento tanto como antes. Veo que la comunidad de la que aprendí todo no para de crecer y me alegro muchísimo por ello :D

Quería proponer una sugerencia:

El otro día estuve usando un motor 3D comercial y trabajé en un sistema de diálogos (Texto por pantalla). Durante el proceso, mi mayor preocupación fue implementar el método de división de palabras activa, que dada una string es capaz de trocearla en varias string de cierta longitud máxima, respetando la división en los espacios. Me sorprendió gratamente ver que el motor contaba con un sistema de división que era prácticamente automático y adaptaba la string a la "caja de texto" sin que tuviese que añadir código "aburrido" para lograrlo.

En su día ya programé algo "parecido" en Bennu, no era perfecta porque la hice rápidamente para un proyecto, pero funcionaba bastante bien y ya sabéis que siempre he compartido todo el trabajo que ha salido de mis deditos. Sugiero que se añada una función capaz de realizar división de palabras activas dada una string y una longitud máxima de caracteres por línea, guardando el resultado en un array de string.

¿Se podría añadir algo así a la mod_string?

Como he dicho antes, también podría hacerse a partir del código que generé en su día, os lo hago llegar si queréis :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

Jolin Windgate, una cosa curiosa tambien, es que parece que inconscientemente nos movemos todos por las mismas cosas al mismo tiempo.

Justo hoy al fin del dia me alegre un monton porque pude completar el ajuste de los textos en un sistema de dialogos proprio que tengo tambien en mi juego de una maldita vez, y justo por mas matematicas que utilizemos, ajustar los globos al texto para que este no se descuadré, es como minimo un autentico calvario, y imaginate, cuando como en mi caso tenemos 64 dialogos posibles, a multiplicar por 2 (player 1 del lado izquierdo hablando con el player 2 del lado derecho y vice versa) y multiplicar esto todo por 3 idiomas xDDDD

O sea las matematicas de espacios entre fuentes ayudan un monton, pero hay siempre algun ajuste que hacer.

Mi sistema es muy sencillo y creo que responde a tu duda, con hacer un text_width(0, tu_texto) / 4, te acercas en 80% de los casos a un ajuste en una caja de texto de forma automatica. Todo depende de la fuente que utilizes y de las diferencias que tenga en algunas letras en la horizontal, porque para tener una formula matematica 100% eficaz, el espacio entre todas las letras + la dimension de las mismas tendria que ser igual en todas las que forman el set, cosa que no suele ocurrir, por eso hay siempre que hacer algun ajuste a mano al final, que es muy frustante la verdad...

Outlaw

Hola Wind, me uno a tu pedido... en mi caso también hice un sistemita para imprimir texto y que recorte la string y etc etc, no es perfecto claro esta, inverti mucho tiempo en ella y pense que todo el mundo ya la habia hecho, pero me gusto el desafio, despues de todo de eso se trata programar...lo que si me parece bueno es que siendo algo utilizado por todos y tanto estaria bueno tener una funcion asi, tal vez entre todos podriamos hacer algo? Serviria si comparto mi codigo?
"Life is cheap when the bounty is high"

Yawin

De paso se puede pedir un simple scanf xDDD que creo que no existe, no??
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Outlaw

Perdon Yawin...pero que es un scanf?
"Life is cheap when the bounty is high"

Yawin

Recoge el buffer del teclado. Tú pones (en C) "scanf("%d",&a);" y te recoge lo que pulses por el teclado.
De esa forma no tendíamos que hacer funciones enooooooooooormes de detectar qué tecla se pulsa, etc...
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Outlaw

Ah ok! Como no se nada de C...mas vale informarme, igual Yawin me parece que no hay que perder el sentido de este hilo, y contribuir entre todos a construir ese tipo de funcion que propuso Windgate, digo,capaz habria que hacer otro post con lo que decis vos y asi mantener todo ordenado y coordinado! ;)
"Life is cheap when the bounty is high"

SplinterGU

ya agregare algo para esto, en el modulo mod_text, que es el que se relaciona con los fonts y textos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Lo de la división de strings parece tener más sentido en la MOD_REGEX ¿no?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Oh, y lo de lectura de cadenas de texto, de floats, de int, etc. Ya lo propuse varias veces. Me alegro que la idea haya gustado, son cosas muy interesantes, espero ver lo que va saliendo de ésto :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

ya lo dije, dividir cadenas segun lo que ocupen en pantalla depende de los fonts, no puede ir en otro modulo que no sea el que escribe textos, ademas que la regex son expresiones regulares, no tiene ni la mas minima relacion con cortar cadenas de textos.

ademas, tiene que ser algo automatico, no que el usuario tenga que cortar, no voy a dar mas detalles para que otros no se copien la idea antes de implementarla.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: Windgate on May 26, 2011, 08:32:47 PM
Oh, y lo de lectura de cadenas de texto, de floats, de int, etc. Ya lo propuse varias veces. Me alegro que la idea haya gustado, son cosas muy interesantes, espero ver lo que va saliendo de ésto :D

perdon wind, yo no hablaba de los inputs, sino de la division de los textos
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Como comentario adicional a lo del input de textos, comento que SDL1.3 incluye un API de entrada de textos bastante interesante (se encarga de caracteres acentuados y cosas así automáticamente).

SDL_SetTextInputRect()
SDL_StartTextInput()
SDL_StopTextInput()

http://wiki.libsdl.org/moin.cgi/CategoryKeyboard

SplinterGU

Quote from: josebita on May 26, 2011, 10:08:15 PM
Como comentario adicional a lo del input de textos, comento que SDL1.3 incluye un API de entrada de textos bastante interesante (se encarga de caracteres acentuados y cosas así automáticamente).

SDL_SetTextInputRect()
SDL_StartTextInput()
SDL_StopTextInput()

http://wiki.libsdl.org/moin.cgi/CategoryKeyboard

eso tiene muy buena pinta, me gustaria pasar a SDL 1.3, pero me parece que no esta portado a todas las plataformas que soportamos oficialmente.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Reutilizar código de otra librería me parece MUCHO mejor que tirar el texto a pelo, total... El resultado va a ser prácticamente el mismo y es un algoritmo que todos sabemos hacer, no vamos a aprender nada nuevo haciéndolo desde 0
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es