duda con implementación de Pausa

Started by crashon182, June 28, 2011, 08:53:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

crashon182

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!
www.elbooz.com.ar - Cursos online Gratuitos!

HenBanKeN

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!
Aún aprendiendo a manejar mis herramientas...

FreeYourMind

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....


crashon182

Ahi me funciono perfecto muchas gracias!! :)
www.elbooz.com.ar - Cursos online Gratuitos!

crashon182

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]

www.elbooz.com.ar - Cursos online Gratuitos!

HenBanKeN

Qué bueno que se haya solucionado! Saludos!
Aún aprendiendo a manejar mis herramientas...

fulgorelizz

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!!
Compiling code -- generating exe...