Pausar juego

Started by Khedrak, December 12, 2010, 01:24:17 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Khedrak

Hola a todos!.
   Bueno vengo con la siguiente duda: como hacer para pausar el juego, es decir, al presionar una tecla congelar todos los procesos y que no sigan apareciendo más hasta que la tecla sea presionada nuevamente. La idea que tenía pensada es congelar todos los procesos con S_FREEZE, pero no se como hacerlo para que todos los procesos activos lo reciban, intente haciendo signal(TYPE x, S_FREEZE), donde x son cada uno de los procesos del juego, pero me di cuenta que eran demasiados procesos a congelar, así que rechaze esta opción.
Y bueno, para que no sigan apareciendo más, era utilizar una variable booleana que al cambiar de estado no puedan aparecer más procesos.

Espero puedan ayudarme y de antemano muchas gracias ^^!.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Khedrak

#2
Quote from: SplinterGU on December 12, 2010, 01:35:03 AM
http://forum.bennugd.org/index.php?topic=1149.0

Muchas gracias, busque por el foro pero no habia visto ese post. :P

Bueno eso era lo que me faltaba, la constante "ALL_PROCESS". Bueno aquí esta el codigo por si a alguien más le sirve:


//pausar el juego.
if(key(_p))
   if(key_p == true)
       key_p = false;
       if(congelado == false)
           congelado = true;
           txt_pausa = write(0, 320, 240, 4, "-PAUSA-");
           //detener todo.
           signal(ALL_PROCESS, S_FREEZE);
       else
           congelado = false;
           delete_text(txt_pausa);
           //restaurar todo.
           signal(ALL_PROCESS, S_WAKEUP);
       end
   end
else
   key_p = true;
end


PD: "key_p" es una variable booleana inicializada en "true" (sirve para que no se pueda mantener presionada la tecla 'p').
     "congelado" es una variable booleana inicializada en "false" para saber si ya esta o no congelada la pantalla y hacer lo inverso.

SplinterGU

eso no te sirve, porque podes tener procesos dormidos o congelados previamente a la pausa... por eso te pase el link donde tenes la funcion para hacer la pausa.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Khedrak

#4
Quote from: SplinterGU on December 12, 2010, 02:33:05 AM
eso no te sirve, porque podes tener procesos dormidos o congelados previamente a la pausa... por eso te pase el link donde tenes la funcion para hacer la pausa.

Mmm tienes razón... pero si en mi proyecto no duermo ni congelo ningun proceso, excepto para pausar el juego nada más? podría servir?, de antemano grax :)

FreeYourMind

Si quieres pausar tambien la musica cuando pausas el juego tienes estas funciones:

pause_wav(all_sound); // Pausa

resume_wav(all_sound); // Volver al juego

Khedrak

Quote from: FreeYourMind on December 12, 2010, 02:46:05 AM
Si quieres pausar tambien la musica cuando pausas el juego tienes estas funciones:

pause_wav(all_sound); // Pausa

resume_wav(all_sound); // Volver al juego

Gracias!, aunque he optado por disminuir el sonido de la musica a "20" cuando este pausado y luego restaurarlo al retomar el juego :P.

SplinterGU

Quote from: Khedrak on December 12, 2010, 02:39:07 AM
Quote from: SplinterGU on December 12, 2010, 02:33:05 AM
eso no te sirve, porque podes tener procesos dormidos o congelados previamente a la pausa... por eso te pase el link donde tenes la funcion para hacer la pausa.

si, claro, pero puede ser mas dificil luego si te olvidas y necesitas modificar el comportamiento.

pero bien, adelante...

Mmm tienes razón... pero si en mi proyecto no duermo ni congelo ningun proceso, excepto para pausar el juego nada más? podría servir?, de antemano grax :)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2