Cita de: Black_Cat en Octubre 01, 2019, 08:09:03 PM
holis (?
amigo, las surfaces sirven para dibujar. Estuve por ahi leyendo que querés aplicarlas a una entrada de texto... hmm desde ya, usar surfaces no es la mejor manera. Ni la optima. Lo suyo seria manejar con funciones de cadena.
ahora, las surfaces como bien dice el amigo de arriba, son para dibujar, es como un lienzo. Y ahi podes hacer varios efectos combinando funciones que alteran el mezclado, por ejemplo par ahacer un sprite totalmente blanco o sacarle los colores a un sprite y dejarlo blanco y negro, o hacer el efecto de congelado. Un montonazo de cosas, pero tiene un cierto coste tanto de memoria como de procesamiento dependiendo ya de que tan vergas te pongás con el efecto.
hoy por hoy existen los shaders, que sirve tambien para aplicar efectos de dibujo y es más optimo. Pero asi tambien, lleva un poco de complejidad manejarlas.
bueno, las funciones basicas que necesitas saber para crear y dibujar una surface son:
surface_crate(ALTO, ANCHO)-> crea una surface con el alto y ancho indicado. Osea, crea un lienzo de tal tamaño para poder dibujar en el. Cabe destacar que uno no vé directamente lo que se dibuja sino que lo hace a traves de codigo.
Otra cosa notables es que la surface tiene posicion absoluta, osea, siempre aparece en la coordenada 0,0. Esto hay que tenerlo en cuenta a la hora de dibujar
surface_free(SURFACE)-> esto borra la surface, es imprescindible borrar la surface si no se usa mas, porque ocupa memoria RAM, si no se borra se iría acumulando hasta que explote la pila de memoria y haga overflow.
surface_set_target(SURFACE)-> esta funcion pone a SURFACE como blanco de dibujo. Osea, todo el codigo de dibujo que siga despues de esta funcion, se aplica encima de la surface.
Ejemplo:
[gml]
surf = surface_create(200,200); //se crea el lienzo de 200x200
surface_set_target(surf); //colocamos la surface para que las funciones de dibujo le afecten
draw_set_text(20, 20, "hola amigos de youtube!"); //la posicion es absoluta
surface_reset_target();
[/gml]
surface_reset_target(); -> hace que las secuencias de dibujo dejen de aplicarse a la surface antes definida con surface_get_target, y entonces las funciones de dibujo se aplican normalmente en la pantalla del juego
eso seria lo mas facil para comenzar a dibujar algo.
A grandes rasgos es como usar el evento draw solo que en un lienzo acotado :)
de ahi hay hartos efectos que le podes poner, pero bueno, eso pa otro tutorial(?
ERES LA MEJOR! (O EL) acabo de entender lo que me habian dicho en otro lado... osea que si dibujo un rectángulo y ese rectangulo se sale de la surface no se dibujara ¿Cierto? osea las surfaces son como las capas de photoshop :O GRACIAS! oye que tanta memoria gasta? q eso es que le tengo miedo... por que asi no vale la pena hacer la scrollbar... ¿no tienes un proyecto donde hayas utilizado algo asi?
otra cosilla jeje ¿como le cambio las coordenadas? ¿necesarios?