Autor Tema: División de palabras activa  (Leído 3726 veces)

Windgate

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
División de palabras activa
« en: Mayo 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
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

  • Hero Member
  • *****
  • Mensajes: 5674
  • Karma: 127
    • GECA soft
Re: División de palabras activa
« Respuesta #1 en: Mayo 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...

Outlaw

  • Sr. Member
  • ****
  • Mensajes: 464
  • Karma: 9
Re: División de palabras activa
« Respuesta #2 en: Mayo 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?
"Life is cheap when the bounty is high"

Yawin

  • Hero Member
  • *****
  • Mensajes: 1088
  • Karma: 44
  • La primera persona que ha "demosceneado" en Bennu.
Re: División de palabras activa
« Respuesta #3 en: Mayo 26, 2011, 09:38:08 am »
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

  • Sr. Member
  • ****
  • Mensajes: 464
  • Karma: 9
Re: División de palabras activa
« Respuesta #4 en: Mayo 26, 2011, 01:56:44 pm »
Perdon Yawin...pero que es un scanf?
"Life is cheap when the bounty is high"

Yawin

  • Hero Member
  • *****
  • Mensajes: 1088
  • Karma: 44
  • La primera persona que ha "demosceneado" en Bennu.
Re: División de palabras activa
« Respuesta #5 en: Mayo 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...
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

Outlaw

  • Sr. Member
  • ****
  • Mensajes: 464
  • Karma: 9
Re: División de palabras activa
« Respuesta #6 en: Mayo 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! ;)
"Life is cheap when the bounty is high"

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: División de palabras activa
« Respuesta #7 en: Mayo 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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6329
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: División de palabras activa
« Respuesta #8 en: Mayo 26, 2011, 08:18:18 pm »
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

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
Re: División de palabras activa
« Respuesta #9 en: Mayo 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
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

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: División de palabras activa
« Respuesta #10 en: Mayo 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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: División de palabras activa
« Respuesta #11 en: Mayo 26, 2011, 09:20:59 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

  • Administrator
  • *****
  • Mensajes: 4039
  • Karma: 257
    • BennuGD Mobile Worklog
Re: División de palabras activa
« Respuesta #12 en: Mayo 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

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: División de palabras activa
« Respuesta #13 en: Mayo 26, 2011, 11:37:42 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

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
Re: División de palabras activa
« Respuesta #14 en: Mayo 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
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