Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Johann en Diciembre 10, 2018, 04:49:50 am

Título: Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: Johann en Diciembre 10, 2018, 04:49:50 am
Tengo un texto que se dibuja sobre un rectangulo dibujado con draw_roundrect_ext.
¿Como hago para que al hacerle scroll al texto (moverlo hacia arriba y abajo), cuando se salga del area del rectangulo, no se dibuje por fuera?
¿Tal vez con una surface?
Me ayudan?
Título: Re:Dibujar texto sin que se salga del rectangulo
Publicado por: FridaFlowers en Diciembre 10, 2018, 05:18:13 am
Te dejo los pasos explicados, de como lo haría yo:
Bueno, inicialmente (1) deberías crear una surface más grande que el texto, lo suficiente para cubrir el texto que se sale por los bordes.

(2) Tendrias que quitar la parte del recuadro para obtener el negativo(3). Esto se hace facilmente con:

draw_set_blend_mode(bm_subtract)
draw_roundrect_ext(...)

Luego deberías crear una nueva surface (4) donde dibujarías el texto normal.
Y repetirías el paso de recorte(5):
draw_set_blend_mode(bm_subtract)
draw_surface(surface_roja, 0, 0)

(6)Fin

Bueno, como dicen en las peliculas: "en mi cabeza sonaba bien".
Título: Re:Dibujar texto sin que se salga del rectangulo
Publicado por: kostra en Diciembre 10, 2018, 11:47:50 am
Yo al estilo kostrón, pongo un sprite encima con menos depth y apañao! xD (en serio que hago eso)
Título: Re:Dibujar texto sin que se salga del rectangulo
Publicado por: FridaFlowers en Diciembre 10, 2018, 11:14:07 pm
De hecho, estuve pensando, si todavía quieres utilizar surfaces, creo que tengo una manera mucho mas facil de hacerlo.

Simplemente creas una surface con el tamaño del rectangulo y dibujas el texto encima, si el texto se sale de la surface simplemente no se dibujará.

Luego bastaría simplemente dibujar la surface.
Te dejo un ejemplo adjunto XD

Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: Johann en Diciembre 14, 2018, 08:27:50 pm
Queda muy elegante en cuadro con el texto de esa manera, gracias por el ejemplo
 Ya estoy preparando la aplicación para publicarla,apenas esté publicada la pongo en el foro para que vean de que se trataba.
Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: Johann en Enero 02, 2019, 11:53:33 pm
Estaba todo tan bonito....
Hasta que se me durmió el celular en ese room y  :'(
Cuando lo desperté, un error me dice que no encuentra la surface, y si no sale el error se queda congelado hasta que pide cerrar la app

Como es una surface entiendo que esto pase pero, ¿como lo evito?
Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: Jucarave en Enero 03, 2019, 12:29:27 am
Puedes almacenar la surface en un sprite, este se conserva durante todo el juego (no olvides borrarlo cuando no lo necesites)

https://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sprites/sprite_create_from_surface.html
Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: Johann en Enero 03, 2019, 02:39:23 am
Resulto ser un bug del GM
https://bugs.yoyogames.com/view.php?id=15485
Siempre me causa gracia que cuando a alguien no le sale algo le echa la culpa al programa XD

Lo arreglé creando la surface si de casualidad se desaparece:

if not surface_exists(recuadro) {
    recuadro = surface_create(960, 480);
}
Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: jhgv en Septiembre 25, 2019, 11:34:18 pm
Que es una surface :c
Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: FridaFlowers en Septiembre 27, 2019, 12:09:27 am
Que es una surface :c
Una surface es un recurso dinámico. Esto quiere decir que no se crea en el editor normalmente como lo haría un sprite, un sonido, un background. Sino que se crea durante la ejecución del juego y para ello necesitas usar código.
Y a efectos prácticos una surface es un recurso que se utiliza para realizar tareas de dibujo. Normalmente, para hacer dibujos personalizados que GameMaker no soporta con funciones nativas, por ejemplo, dibujar una estrella o dibujar una dona, o incluso hacer efectos más complejos, como ser,  el típico efecto de estar abajo del agua o de ola de calor donde todo se desfigura.
Se pueden lograr efectos muy buenos con surfaces, el problema es el costo en memoria, y a lo mejor si el efecto es muy complejo, al llevar muchos pasos, el costo en procesamiento. Todo dependería si necesita hacerse en cada step.
Otro inconveniente que suele presentar el uso de Surfaces, es que cómo todo se hace mediante código es difícil visualizar el resultado en sí sino hasta que todo está imlpementado. Aún así se utiliza mucho.
Título: Re:Dibujar texto sin que se salga del rectangulo [SOLUCIONADO]
Publicado por: jhgv en Octubre 03, 2019, 09:53:41 pm
Una surface es un recurso dinámico. Esto quiere decir que no se crea en el editor normalmente como lo haría un sprite, un sonido, un background. Sino que se crea durante la ejecución del juego y para ello necesitas usar código.
Y a efectos prácticos una surface es un recurso que se utiliza para realizar tareas de dibujo. Normalmente, para hacer dibujos personalizados que GameMaker no soporta con funciones nativas, por ejemplo, dibujar una estrella o dibujar una dona, o incluso hacer efectos más complejos, como ser,  el típico efecto de estar abajo del agua o de ola de calor donde todo se desfigura.
Se pueden lograr efectos muy buenos con surfaces, el problema es el costo en memoria, y a lo mejor si el efecto es muy complejo, al llevar muchos pasos, el costo en procesamiento. Todo dependería si necesita hacerse en cada step.
Otro inconveniente que suele presentar el uso de Surfaces, es que cómo todo se hace mediante código es difícil visualizar el resultado en sí sino hasta que todo está imlpementado. Aún así se utiliza mucho.

Hola, ya eh aprendido un poco mas de las surfaces ¿son lo mismo que un evento draw pero con capas cierto? entonces... ¿como harias lo de las olas de calo? pliss ayudame :")   




o hare una pregunta así etiquetandote :v okno