Bennu Game Development

Foros en Español => Sugerencias => Topic started by: Windgate on May 26, 2011, 12:09:53 AM

Title: División de palabras activa
Post by: Windgate on May 26, 2011, 12:09:53 AM
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
Title: Re: División de palabras activa
Post by: FreeYourMind on May 26, 2011, 01:30:47 AM
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...
Title: Re: División de palabras activa
Post by: Outlaw on May 26, 2011, 03:14:36 AM
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?
Title: Re: División de palabras activa
Post by: Yawin on May 26, 2011, 09:38:08 AM
De paso se puede pedir un simple scanf xDDD que creo que no existe, no??
Title: Re: División de palabras activa
Post by: Outlaw on May 26, 2011, 01:56:44 PM
Perdon Yawin...pero que es un scanf?
Title: Re: División de palabras activa
Post by: Yawin on May 26, 2011, 02:07:03 PM
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...
Title: Re: División de palabras activa
Post by: Outlaw on May 26, 2011, 06:35:37 PM
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! ;)
Title: Re: División de palabras activa
Post by: SplinterGU on May 26, 2011, 06:38:04 PM
ya agregare algo para esto, en el modulo mod_text, que es el que se relaciona con los fonts y textos.
Title: Re: División de palabras activa
Post by: Drumpi on May 26, 2011, 08:18:18 PM
Lo de la división de strings parece tener más sentido en la MOD_REGEX ¿no?
Title: Re: División de palabras activa
Post by: 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
Title: Re: División de palabras activa
Post by: SplinterGU on May 26, 2011, 09:20:19 PM
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.
Title: Re: División de palabras activa
Post by: SplinterGU on May 26, 2011, 09:20:59 PM
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
Title: Re: División de palabras activa
Post by: 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
Title: Re: División de palabras activa
Post by: SplinterGU on May 26, 2011, 11:37:42 PM
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.
Title: Re: División de palabras activa
Post by: Windgate on May 31, 2011, 10:52:03 PM
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
Title: Re: División de palabras activa
Post by: darío on June 01, 2011, 07:35:27 PM
Hola Windgate:

Yo también hice algo parecido que era bastante configurable (permitia escribir a lo "máquina de escribir", configurar las velocidades de escritura, etc. etc)

Se puede hacer que el texto se escriba inmediatamente configurando la velocidad a la máxima velocidad (entonces es "instantáneo). En el archivo ".h" que hay en el zip hay una explicación de cómo configurar cada parámetro.

Alguna vez me pareció verlo en el Bennupack...

Lo adjunto por si le sirve a alguien.

Un saludo,

Darío
Title: Re: División de palabras activa
Post by: SplinterGU on June 02, 2011, 01:03:51 AM
karma dario!
Title: Re: División de palabras activa
Post by: Windgate on June 15, 2011, 09:26:50 AM
El writer deluxe tuyo lo usé en su día Dario, ¿Pero estás seguro de que se encarga de la división de palabras activa?

En cualquier caso lo idea sería llevarlo a una .dll
Title: Re: División de palabras activa
Post by: darío on June 16, 2011, 09:37:04 PM
Si "por división de palabras activa" te refieres a que calcule si la palabra no cabe en la línea la baje a la línea siguiente, sí, lo hace. Si te refieres a otra cosa no entendí entonces muy bien.
Title: Re: División de palabras activa
Post by: Outlaw on June 17, 2011, 03:46:56 AM
Karma para Dario!