Enero 13, 2018, 09:45:33 PM Ultima modificación: Enero 13, 2018, 11:24:14 PM por TheJaj
Hola, cuando cambian de pantalla minimizada a maximizada me salta este error.

############################################################################################
ERROR in
action number 1
of Draw Event
for object obj_Omniciente:

Trying to use non-existing surface.
at gml_Object_obj_Omniciente_DrawEvent_1 (line 3) - draw_surface(Oscuridad,view_xview,view_yview)
#####################################################################

Entiendo que dice que la "Surface" no existe pero realmente esta declarada de forma global en todos los objetos...

La surface la creas solo en un evento create?

Ya que si es así, en donde dibujas la surface puedes poner esto:
if (!surface_exists(Oscuridad)) {
Oscuridad = surface_create(room_width, room_height);
draw_surface(Oscuridad,0,0);
} else {
draw_surface(Oscuridad,0,0);
}



Ahora funciona como debería, pero ¿por que se elimina la surface al agrandar la pantalla?

#3 Enero 13, 2018, 11:04:04 PM Ultima modificación: Enero 13, 2018, 11:07:35 PM por quiero aprender
Cita de: TheJaj en Enero 13, 2018, 10:50:51 PM
Ahora funciona como debería, pero ¿por que se elimina la surface al agrandar la pantalla?
Creo que sucede eso porque cuando "suspendes" tu juego, Game Maker no actualiza la surface o mas bien la elimina y por lo que siempre es necesario crear una sentencia de que si no existe volver a crearla.

Soy algo inexperto y tal vez esa no es la respuesta pero es lo que me imagino.

Por esto:
Cita de: Manual oficial
First, you should realise that surfaces (except the application surface) are "volatile". This means that if the device or window loses focus or is minimised (good examples are when a screensaver comes up in Windows, or on an Android device when the app loses focus due to a call) then the surface may be destroyed. This is because it is stored in the texture memory and may be overwritten when the target platform needs that memory for something else which means that you should always have some type of fail-safe code in place, usually with the surface_exists function.

En español:
Cita de: Manual en español
Primero, es vital entender que las superficies (a exepción de la application surface) son "volátiles". Esto significa que si, por ejemplo, el dispositivo o la ventana es minimizada o pierde su foco, cualquier superficie puede ser destruida sin aviso previo. Esto es a causa de que las superficies se almacenan en la memoria de textura, y ésta puede sobreescribirsecuando la plataforma necesita dicha memoriapara algo más. Es por ello que es importante tener un código de "recuperación" o redibujado, acompañado de la función surface_exists().

http://docs.yoyogames.com/source/dadiospice/002_reference/surfaces/index.html
https://bygdle.xyz/gamemaker/manual/Referencia/Superficies/
alaberga regué el café.

BA:STFW&RTFM