Buenas,
yo no se las ganas que tienen muchas veces de complicarnos la vida a los novatos, me refiero a la gente que desarrolla programas como GM, no se yo por qué les ha dado por quitar la función sleep en GMS, se ve que les estorbaba mucho el icono, en fin...
El caso es que he visto en otros temas que se puede hacer algo parecido gracias a instance_deactivate_all(self) y luego colocar una alarma para volver a "activate" las instancias. Y lo he probado, pero no se consigue lo mismo, se consigue algo parecido, y yo quiero exactamente lo mismo.
Cuando lo haces con esta función desaparecen todas las instancias el tiempo que hayas estipulado en la alarma, pero yo no quiero que desaparezcan las instancias, solo quiero que se detengan, que se detenga el tiempo.
Me explico para que entendáis donde quiero usarlo. Estoy con el tutorial de atrapa al payaso, y quiero que cuando pulso sobre una bomba (se escucha la explosión) el juego se detenga durante dos segundos, solo que se detenga, no que desaparezca nada. Y tras pasar esos dos segundos ya aparecerá la tabla de records... que esa es otra, tampoco aparece en gms, pero bueno, eso ya lo pediré en otro mensaje.
Como siempre, muchas gracias por vuestra ayuda.Saludos
Pues no, no se puede hacer que funcionen igual. Una cosa es sleep y otra cosa es instance_deactivate.
Las instancias van a desaparecer. El truco que se hace en estos casos es tomar una captura de la pantalla del juego ( sprite_create_from_screen, background_create_from_screen ) antes de desactivar las instancias, y luego mostrar esa imagen al momento de la "pausa".
La otra opción aun más penosa y tardada sería crear tu sistema manual de pausa, en donde cada instancia debe estar programada para reaccionar o quedarse quieta en pantalla según la pausa esté activa o no.
Puedes usar este script:
///scr_sleep(millisecs)
var Tiempo, Pasado, Espera;
Tiempo = current_time;
Pasado = 0;
Espera = argument0;
while( Espera > Pasado ){
Pasado = current_time - Tiempo;
}
Sim embargo, y esto es importante, no lo recomiendo para esperas largas, el script lo que hace es colocar el programa en un ciclo que dura lo que tu le específicas, esto aumenta considerablemente el uso de procesador durante la duración de la espera y si el ciclo tarda mucho el programa sera marcado como No Responde.
El mejor que yo he encontrado, y estoy usando en mi juegos (mintruder, lo teneis en la sección de juegos) es un ejemplo que usa surfaces y desactiva todas las instancias menos la propia que llama a la pausa. Hay dos versiones, una normal y otra que aplica un efecto blur al fondo. La verdad es que funciona muy bien.
Esto es lo que hace:
1. Create a una surface de lam medida de la room.
2. Ejecute el evento draw para cada instancia en la surface.
3. Desactiva todas las instancias excepto la del objeto controlador de la pausa.
4. Hace un Draw de la surface en la room que aparede con todas las instancias "congeladas" en su sitio.
http://gmc.yoyogames.com/index.php?showtopic=590421
saludos