Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: quiero aprender en Enero 13, 2018, 09:23:44 PM

Título: Guardar lo que se dibujo en la surface en android [Solucionado]
Publicado por: quiero aprender en Enero 13, 2018, 09:23:44 PM
Muy buenas.
En mi juego tengo un objeto que crea una surface que sirve como un "lienzo" para dibujar en el pero cuando salgo del juego o bloqueo el celular para después entrar en el juego nuevamente, lo que he dibujado anteriormente se pierde, ya no está.

obj_Surface:
Create evenet
surf = surface_create(room_width,room_height);

Room end y Room Start:
if (surface_exists(surf))
    surface_free(surf);


Draw Event:
if surface_exists(surf)
    draw_surface_stretched(surf,0,0, room_width, room_height);
else{
    surf = surface_create(room_width,room_height);
    draw_surface_stretched(surf,0,0, room_width, room_height);
}


Y cuando Dibujo:
obj_paint: Step Event
if place_meeting(x,y,obj_block){
    surface_set_target(obj_Surface.surf);
     
    draw_sprite_ext(spr_paint_splatter, choose(0, 1), x, y, 0.2, 0.2, image_angle, color, 1);
     
     ///se borra todo menos la parte que se dibujo
     draw_set_blend_mode(bm_subtract);
     draw_sprite(obj_game.nivel,0,0,0);
     draw_set_blend_mode(bm_normal);
     surface_reset_target();   
     
        instance_destroy();
}


Lo que quisiera es que cuando salgas del juego (pero sin quitarlo en segundo plano) o si se suspende el celular, guardar y mostrar lo que se ha dibujado en pantalla.

Gracias por su ayuda.
Título: Re:Guardar lo que se dibujo en la surface en android
Publicado por: Clamud en Enero 14, 2018, 04:28:22 PM
Se puede guardar en un buffer cada cierto tiempo o cada vez que ocurra un cambio.

Al principio crea una surface y un buffer con el tamaño necesario para almacenar la surface. El tamaño del buffer se da en bytes y por cada pixel se necesitan 4 bytes, entonces el tamaño del buffer debe ser w*h*4, donde w y h son la anchura y la altura de la surface.
[gml]
sf = surface_create( 10, 10 );
bf = buffer_create( 400, buffer_fixed, 4 );
[/gml]
Cuando ocurra un cambio copia la surface al buffer
[gml]
buffer_get_surface(bf, sf, 0, 0, 0);
[/gml]
Antes de dibujar revisa si la surface existe. Si no existe crea una nueva surface y copia el contenido del buffer
[gml]
if not surface_exists(sf){
   sf = surface_create(w,h);
   buffer_set_surface(bf, sf, 0, 0, 0);
}
draw_surface(sf, 0,0);
[/gml]
Título: Re:Guardar lo que se dibujo en la surface en android
Publicado por: quiero aprender en Enero 18, 2018, 06:06:22 PM
Cita de: Clamud en Enero 14, 2018, 04:28:22 PM
Se puede guardar en un buffer cada cierto tiempo o cada vez que ocurra un cambio.

Al principio crea una surface y un buffer con el tamaño necesario para almacenar la surface. El tamaño del buffer se da en bytes y por cada pixel se necesitan 4 bytes, entonces el tamaño del buffer debe ser w*h*4, donde w y h son la anchura y la altura de la surface.
[gml]
sf = surface_create( 10, 10 );
bf = buffer_create( 400, buffer_fixed, 4 );
[/gml]
Cuando ocurra un cambio copia la surface al buffer
[gml]
buffer_get_surface(bf, sf, 0, 0, 0);
[/gml]
Antes de dibujar revisa si la surface existe. Si no existe crea una nueva surface y copia el contenido del buffer
[gml]
if not surface_exists(sf){
   sf = surface_create(w,h);
   buffer_set_surface(bf, sf, 0, 0, 0);
}
draw_surface(sf, 0,0);
[/gml]
Muchas gracias, funciona de maravilla.