Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: crashon182 on June 28, 2011, 08:53:36 PM

Title: duda con implementación de Pausa
Post by: crashon182 on June 28, 2011, 08:53:36 PM
hola tengo el siguiente código en el main, donde quiero implementar una pausa
[code language="bennu"]
process main()   
begin
   
   set_fps(27,1);
   set_mode(800,600,32);
   fichero=load_fpg("graficos.fpg");
   put_screen(fichero,3);
   nave(100,450);
     ipm1=enemigo(2,30,30,0,0);
   ipm2=enemigo(4,70,10,1,0);
   ipm3=enemigo(4,150,5,0,51);
   pausa=0;
   repeat      
   if (key(_P) && pausa==0)
      signal(ipm1,S_FREEZE);
      signal(ipm2,S_FREEZE);
      signal(ipm3,S_FREEZE);
      signal(ipd,S_FREEZE);
      pausa=1;
   end
   if (key(_A) && pausa==1)
      signal(ipm1,S_WAKEUP);
      signal(ipm2,S_WAKEUP);
      signal(ipm3,S_WAKEUP);
      signal(ipd,S_WAKEUP);
      pausa=0;
   end   
   frame;
     until (key(_ESC))
end
[/code]

este código asi me funciona correctamente, pero cuando escribo if (key(_P) && pausa==1) (en lugar de presionar la tecla A, que presione la P). no hace nada, porque puede ser.

saludos!
Title: Re: duda con implementación de Pausa
Post by: HenBanKeN on June 28, 2011, 09:52:14 PM
Mmmm a simple vista, lo único que se me ocurre, es que cuando asignas la misma letra a ambas acciones...
Y luego presionas esa letra, mantienes tu dedo en la tecla por más de un frame (son 27 por segundo! xD), lo que genera que el ciclo se lea muchas veces en una sola pulsada, y entonces pausa oscilaría entre 0 y 1 muchas veces.

Intenta poner la P en ambas acciones pero adentro usa un:

WHILE (key(_P))
FRAME;
END


Y ponlo antes de los signal.

De esa forma, presionar la tecla P ocurrirá, luego se quedará leyendo este WHILE hasta que sueltes la tecla, y una vez que sueltes la tecla se ejecutará el freeze o el wakeup según corresponda :3

No se me ocurre qué otra cosa podría ser =O saludos!
Title: Re: duda con implementación de Pausa
Post by: FreeYourMind on June 28, 2011, 09:56:56 PM
Lo que pasa es que una condición anula la otra, o mejor dicho, antes del frame pasa por la condicion 1 que valida la 2 y despues entra en ella, tienes que usar otra variable auxiliar....

Title: Re: duda con implementación de Pausa
Post by: crashon182 on June 28, 2011, 09:57:52 PM
Ahi me funciono perfecto muchas gracias!! :)
Title: Re: duda con implementación de Pausa
Post by: crashon182 on June 28, 2011, 10:03:15 PM
Quote from: FreeYourMind on June 28, 2011, 09:56:56 PM
Lo que pasa es que una condición anula la otra, o mejor dicho, antes del frame pasa por la condicion 1 que valida la 2 y despues entra en ella, tienes que usar otra variable auxiliar....



lo había realizado con un else, pensando que podría hacer eso pero tampoco me funciono.

asi estaba el código[code language="bennu"]
if (key(_P) && pausa==0)
      signal(ipm1,S_FREEZE);
      signal(ipm2,S_FREEZE);
      signal(ipm3,S_FREEZE);
      signal(ipn,S_FREEZE_TREE);
      pausa=1;

   else if (key(_P) && pausa==1)
      signal(ipm1,S_WAKEUP);
      signal(ipm2,S_WAKEUP);
      signal(ipm3,S_WAKEUP);
      signal(ipn,S_WAKEUP_TREE);
      pausa=0;
   end   

[/code] con el else:

Igualmente muchas gracias pero ya lo solucione con la respuesta anterior, dejo el código tal cual me funciono correctamente:

[code language="bennu"]
if (key(_P) && pausa==0)
       WHILE (key(_P))
         FRAME;
      END
      signal(ipm1,S_FREEZE);
      signal(ipm2,S_FREEZE);
      signal(ipm3,S_FREEZE);
      signal(ipn,S_FREEZE_TREE);
      pausa=1;
   end
   if (key(_P) && pausa==1)
      WHILE (key(_P))
         FRAME;
      END
      signal(ipm1,S_WAKEUP);
      signal(ipm2,S_WAKEUP);
      signal(ipm3,S_WAKEUP);
      signal(ipn,S_WAKEUP_TREE);
      pausa=0;
   end   
[/code]

Title: Re: duda con implementación de Pausa
Post by: HenBanKeN on June 28, 2011, 10:05:22 PM
Qué bueno que se haya solucionado! Saludos!
Title: Re: duda con implementación de Pausa
Post by: fulgorelizz on October 17, 2011, 10:40:51 AM
hola que tal!! les dejo otra idea de pausa que una vez implemente!!


//ciclo principal
LOOP
     if(key(_teclapausa) and pausa==0)
     pausa=1;//esta es una variable global definida por el usuario
        while(key(_teclapausa))
         frame;
        end
     END



     if(key(_teclapausa) and pausa==1)
     pausa=0;//esta es una variable global definida por el usuario
        while(key(_teclapausa))
         frame;
        end
     END


FRAME;
END




process miproceso()
begin


loop
    //....


    //pero si hay pausa nose mueve
    while(pausa==1)
       frame;
    end
frame;
end




como vemos mientras este jugando, si mi ciclo principal percibe una tecla, por ejemplo _ENTER, entonces evalua si hay pausa o no, si no hay pausa la aplica, y si de casualidad he dejado pisada la tecla, encierro un frame mientras mantengo la tecla apretada, para no quitar el efecto al menos que suelte la tecla y la vuelva a pisar, como en ese momentos los demas frames corren, pes al leer el cambio en la variable pausa, entran en un ciclo, mientras la variable este a 1, como dentro de ese ciclo no hay formulas ni calculos, entonces, parecera que se han congelado, esto debe ir antes del frame del ciclo de cada proceso.... bueno espero esta ayuda tambien les sirva de algo, saludos!!