hola yo hago un dibujo en un cuarto , paso a otro y quiero volver y encontrar mi dibujo , AHHHHHHHHHHHHHHHHHHHHHHHH
Gracias

Si se borra al cambiar de room, intenta copiar la surface a un sprite y luego, al volver al room, redibujar el sprite en una nueva surface. También puedes guardarla en un buffer con buffer_get_surface y luego recuperarla con buffer_set_surface


hola y gracias con que comandos copio al sprite y recupero??

Para copiar el contenido de la surface al sprite:
sprite_create_from_surface()

No hay una función que "recupere" la superficie a partir de un sprite, sino que tienes que dibujar el sprite en esa surface.

Tanto la surface como el sprite creado a partir de la surface deben borrarse de la memoria con la función apropiada al final del juego, de lo contrario se corre el riesgo de que el juego presente una fuga de memoria.

Y como hatias con la funcion buffer???
Porque probe y no pasa nada.
O con el problema que tengo cual seria la mas facil resolucion???

Hola necesito algun ejemplo del uso de las funciones pues no puedo  hacerlo

Este es un ejemplo que usa background_create_from_surface, debes colocar el código en los lugares indicados:
[gml]
//Al iniciar
global.w = ; //anchura
global.h = ; //altura
global.sf = surface_create( global.w, global.h );
global.bg = -1; //no hay dibujo
surface_set_target( global.sf );
//...se dibuja en sf...

//Al cambiar de habitacion
global.bg = background_create_from_surface( global.sf,
0,0,global.w,global.h, false,false ); //guardar sf en bg
surface_reset_target();

//Al regresar a la habitacion
if not surface_exists( global.sf ) //si sf se ha borrado
{
    global.sf = surface_create( global.w, global.h ); //crear otra vez
    if background_exists( global.bg ) //si el dibujo se puede recuperar
    {
        surface_set_target( global.sf );
        draw_background( global.bg, 0,0 ); //dibujarlo en sf
        surface_reset_target();
       
        background_delete( global.bg ); //borrar bg
    }
}
[/gml]

Por cierto, intenté utilizar la función bufer_set_surface y al parecer no está operativa. encontré esto:

http://bugs.yoyogames.com/view.php?id=16812
http://bugs.yoyogames.com/view.php?id=17733


Hola chicos, probe todo como me  comentaron pero los dibujos al volver desaparecen
gracias por las molestias

Cita de: Guacusio en Octubre 10, 2015, 10:21:30 PM
Por cierto, intenté utilizar la función bufer_set_surface y al parecer no está operativa. encontré esto:

http://bugs.yoyogames.com/view.php?id=16812
http://bugs.yoyogames.com/view.php?id=17733

Raro, acabo de probarlas y funcionan correctamente, tambien a notar que los reportes que enlazas son de los primeros meses del año, asi que es probable que ya hayan sido solucionados.

Recuerda usar un buffer de almenos el tamaño minimo para que quepa la superficie, si se usan buffers del tipo Grow no van a aumentar su tamaño para que entre la superficie, debe ser del tamaño adecuado desde el principio.

Ah, y otra cosa a notar es que las funciones buffer_get_surface y buffer_set_surface solo funcionan para Windows y PlayStation 4.

Cita de: Killer en Octubre 11, 2015, 08:09:30 AM
Cita de: Guacusio en Octubre 10, 2015, 10:21:30 PM
Por cierto, intenté utilizar la función bufer_set_surface y al parecer no está operativa. encontré esto:

http://bugs.yoyogames.com/view.php?id=16812
http://bugs.yoyogames.com/view.php?id=17733

Raro, acabo de probarlas y funcionan correctamente, tambien a notar que los reportes que enlazas son de los primeros meses del año, asi que es probable que ya hayan sido solucionados.

Recuerda usar un buffer de almenos el tamaño minimo para que quepa la superficie, si se usan buffers del tipo Grow no van a aumentar su tamaño para que entre la superficie, debe ser del tamaño adecuado desde el principio.

Ah, y otra cosa a notar es que las funciones buffer_get_surface y buffer_set_surface solo funcionan para Windows y PlayStation 4.

Uso un buffer tipo buffer_fast y de tamaño ancho*alto*4 (x4 porque cada pixel utiliza 4 bytes de memoria en formato RGBA) . El primer link que puse se derivó al caso del segundo ya que es el mismo tema. Si te fijas en el bug Nº17733 (el segundo link que envié), en el Issue History aparece que el último acontecimiento es del 17 de julio y no aparece el tema cerrado. En varias otras partes he encontrado que hay problemas con esa función, por ejemplo en este post del 6 de agosto se señala que la función buffer_set_surface aún no está implementada:

http://gmc.yoyogames.com/index.php?showtopic=672356

Es extraño pero ahora que vuelvo a probar el mismo código sí funciona y no hice ningún cambio. El código que podría aplicarse es este:

//guardado de la surface en un buffer
b=buffer_create(b*h*4,buffer_fast,1);//(b,h) = (ancho,alto) de la surface
buffer_get_surface(b,s,0,0,0);//s=id de la surface
surface_free(s);


//recuperación de la surface desde el buffer:
s=surface_create(w,h);
buffer_set_surface(b,s,0,0,0);
buffer_delete(b);



El tema al que enlazas usa como prueba de que la función no está implementada otro enlace a un post del 17 de Marzo, en dicho post usar la función tira un mensaje de error que específicamente dice que la función aún no está implementada, si tu GM no está dando dicho error entonces la función esta implementada pero estaba siendo usada incorrectamente.

En el mismo tema el usuario que dice que la función no está implementada luego se corrige a si mismo y pone un enlace a las notas de versión de GMS, donde señala que buffer_set_surface fue agregada en la versión 1.4.1598, el 10 de julio de este año, para windows y PS4.

EL hecho de que los reportes no han sido marcados como solucionados podría ser señal de intenciones para habilitar dicha funcionalidad para otras plataformas, o más probablemente mala administración de parte de Yoyo, que lamentablemente se ha vuelto cosa de esperar, algunos reportes que yo hice desde hasta hace año y medio fueron "asignados" y nunca más fueron actualizados.

No tengo malas intenciones al decirlo, pero varias veces he visto a gente diciendo que el GM no funciona como debería y la gran mayoría de las veces termina siendo error humano.

#12 Octubre 11, 2015, 05:00:08 PM Ultima modificación: Octubre 11, 2015, 05:06:43 PM por fasst007
En las opciones settings del room, tilda la opción "persistent" entonces cuando vuelvas a ese room persistirá todo cual como lo dejaste antes de salir de el.

En el ejemplo que te pasé mantienes presionado el clic y arrastras para dibujar como en el paint. Presionando la tecla "P" te pasas a otro room que es el de Pausa, y nuevamente presionas "P" para volver y el dibujo del surface permanece intacto.

El único inconveniente es si te sales de la aplicación y vuelves o cosas así el surface se destruye.
Saludos

Cita de: Killer en Octubre 11, 2015, 10:08:31 AM
El tema al que enlazas usa como prueba de que la función no está implementada otro enlace a un post del 17 de Marzo, en dicho post usar la función tira un mensaje de error que específicamente dice que la función aún no está implementada, si tu GM no está dando dicho error entonces la función esta implementada pero estaba siendo usada incorrectamente.

En el mismo tema el usuario que dice que la función no está implementada luego se corrige a si mismo y pone un enlace a las notas de versión de GMS, donde señala que buffer_set_surface fue agregada en la versión 1.4.1598, el 10 de julio de este año, para windows y PS4.

EL hecho de que los reportes no han sido marcados como solucionados podría ser señal de intenciones para habilitar dicha funcionalidad para otras plataformas, o más probablemente mala administración de parte de Yoyo, que lamentablemente se ha vuelto cosa de esperar, algunos reportes que yo hice desde hasta hace año y medio fueron "asignados" y nunca más fueron actualizados.

No tengo malas intenciones al decirlo, pero varias veces he visto a gente diciendo que el GM no funciona como debería y la gran mayoría de las veces termina siendo error humano.

Normalmente hago muchas pruebas antes de concluir que hay un bug, pero en este caso tienes razón, nunca me salió el mensaje de error donde se indica que la función no está implementada; debo haber cometido un error en alguna parte y por eso no me funcionaba, aunque no logré identificar cuál   :-X

Sé que no tienes malas intenciones al decir que hay gente que lo primero que hace al ver que su código no funciona es culpar a GM. Sin embargo, no sé si sea la gran mayoría. En cada versión nueva existe un no despreciable listado de bugs corregidos en las release notes y a mi me pasó que usando la última versión encontré un bug que, luego de un poco de investigación, resultó estar en proceso de solución por parte de yoyo (me pasó con la función surface_copy en android que funcionaba incorrectamente); otras veces me he topado con funciones que no trabajan como corresponde al compilar con el yoyo compiler, por ejemplo los haptics effects que no funcionan, y luego de investigar descubrí que Yoyo lo justifica por "no tener la licencia" (cosa rara que tenga la licencia para la versión sin su compilador y no la tenga para el yoyo compiler), además de no mencionarlo en ninguna parte del manual (http://bugs.yoyogames.com/view.php?id=12723). De hecho, parece que este último caso es otro de los que quedarán archivados eternamente como te pasó a ti ya que hace 2 años no tiene cambios.


Gracias a todos como siempre esto que estoy realizando debera funcionar en ios y android, voy a experimentar y a fijarme donde cometo un error pues el surface se graba porque ocupa la memoria pero no se plasma en el draw