Ver la versión completa : ¿ Como hago para que los procesos empiezen cuando yo quiera ?
Jonazan2
06/03/2009, 16:02
Pues esa es mi pregunta en un codigo de un pong quiero hacer que cuando se pulse enter empieze el juego a ver si podeis aclarmelo un poco. Gracias por adelantado.
joer, pues es facil.
en el bucle de la pantalla de presentacion haces algo así.
Loop //aqui empieza el bucle, eso ya lo tienes tu
if(key(_enter)) empezar_juego(); break; end //esta línea hace que cuando pulses intro se inicie el proceso empezar_juego o como sea que has llamado al proceso que empuieza el juego. tambien mata el proceso de la presentación.
frame; //el frame; eso ya lo tienes tu.
end //aqui termina el bucle, eso ya lo tienes tu
Es facil ¿no?
Jonazan2
06/03/2009, 17:41
Mira los procesos los he puesto como me has dicho pero ahora lo que hace es que funcionan duplicandose, saliendo varias bolas varias palas...
BEGIN
set_mode(640,480,16);
id1=load_fpg("p-pong.fpg");
id2=0;
fondo=load_fpg("fondo.fpg");
fondo1=load_fpg("fondo1.fpg");
put_screen(fondo,1);
write(0,300,200,4,"Pulsa enter para empezar");
pala1();
pala2();
bola();
loop
if(key(_enter))pala1();pala2();bola();id2=1;end
if (id2==1)
put_screen(fondo1,1);
delete_text(0);
end
frame;
end
END
Una solución rápida para solucionarte el problema es cambiar el if
if(key(_enter) and id2==0)pala1();pala2();bola();id2=1;end
Una solución aún mejor, porque es mucho más flexible:
// esperamos a que se pulse _enter para empezar el juego
loop
// "break" saldrá del bucle cuando se pulse enter
if(key(_enter)) break; end
frame;
end
// configuramos el inicio del juego
pala1();pala2();bola();
put_screen(fondo1,1);
delete_text(0);
// bucle principal del juego... ¡no hacemos nada, todo se hace en los procesos!
loop
frame;
end
Jonazan2
06/03/2009, 18:30
Me sigue pasando lo mismo, es como si hiciese el proceso pero dos veces a la vez y los graficos se sobrepusiesen mirar os paso el codigo completo a ver si encontrais algo mal.
program ppong;
global
int fondo;
int fondo1;
int id1;
int id2;
end
BEGIN
set_mode(640,480,16);
id1=load_fpg("p-pong.fpg");
id2=0;
fondo=load_fpg("fondo.fpg");
fondo1=load_fpg("fondo1.fpg");
put_screen(fondo,1);
write(0,300,200,4,"Pulsa enter para empezar");
pala1();
pala2();
bola();
loop
if(key(_enter) and id2==0)pala1();pala2();bola();id2=1;end
if (id2==1)
put_screen(fondo1,1);
delete_text(0);
end
frame;
end
END
Process pala1()
begin;
x=90;
y=240;
file=id1;
graph=1;
loop
if(key(_q)) y=y-10;end
if(key(_a)) y=y+10;end
frame;
end
end
PROCESS pala2()
begin;
x=550;
y=240;
file=id1;
graph=1;
loop
if(key(_up)) y=y-10;end
if(key(_down)) y=y+10;end
frame;
end
end
PROCESS bola()
private
int punts1,punts2;
end
begin;
x=320;
y=240;
file=id1;
graph=2;
angle=rand(0,360000);
write_var(0,90,50,4,punts1);
write_var(0,550,50,4,punts2);
loop
advance(15);
if(collision(type pala1))
if(angle > 90000 and angle < 180000)
angle=rand(0,90000);
end
if(angle > 180000and angle < 270000)
angle=rand(270000,360000);
end
end
if(collision(type pala2))
if(angle > 270000 and angle < 360000)
angle=rand(180000,270000);
end
if(angle > 0 and angle < 90000)
angle=rand(90000,180000);
end
end
if(y<0 or y>480)
angle=(360000-angle)%360000;
end
if(x<0)
punts2=punts2+1;
x=320;
y=240;
angle=rand(0,360000);
end
if(x>640)
punts1=punts1+1;
x=320;
y=240;
angle=rand(0,360000);
end
if (punts1 == 3 or punts2 == 3)
while(not key(_enter))
delete_text(0);
write(0,320,200,4,"GAMEOVER!");
frame;
end
exit();
end
frame;
end
end
borra las tres lineas que hay bajo el write(0,300,200,4,"Pulsa enter para empezar");
porque estás llamando dos veces a los procesos una porque sí antes de iniciar el bucle y otra cuando pulsas enter.
Jonazan2
06/03/2009, 18:57
Ahora perfecto chipan muchas gracias, entonces en el programa principal puedo llamar a los procesos de esta manera sin tener la necesidad de ponerlos tras el loop ?
si si, los procesos se pueden llamar donde sea (dentro de otro proceso), la cuestión es simplemente si quieres que aparezcan porque si o bajo una condición. Una vez entiendes el concepto es muy facil.
Jonazan2
06/03/2009, 19:30
Muchas gracias de nuevo eres una maquina:)
gracias a ti, pero aqui hay verdaderas máquinas.
Jonazan2
06/03/2009, 23:00
Te lo digo muy en serio da gusto ver como hay gente que es muy muy buena y profesional y que sabe un porron y que responden a los novatos principiantes como yo de una forma buena y encima enseñandonos un monton.
Da gusto la verdad.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.