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!
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!
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....
Ahi me funciono perfecto muchas gracias!! :)
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]
Qué bueno que se haya solucionado! Saludos!
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!!