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.
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]
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.