hola, a ver si alguien me puede ayudar a simplificar el codigo de este menu que sera el menu principal del juego.
tambien querria saber como hago para matar al proceso menu() y al resto de opciones despues de haber elegido una de ellas
gracias, 1 saludo a todos
Process menu()
Begin
titulo();
campeonato();
carrera();
cargar();
salir();
loop
frame;
End
End
//////////////////////////////////////////////////////
process titulo()
begin
file = fpg_menu;
graph = 1;
x = C_RESOLUCIONX/2;
y = 50;
loop
frame;
end
end
//////////////////////////////////////////////////////
process campeonato()
begin
file = fpg_menu;
graph = 2;
x = C_RESOLUCIONX/2;
y = 100;
loop
If (collision(type raton))
graph = 3;
If (mouse.left)
presentacion(1,0);
end
else
graph = 2;
end
frame;
end
end
//////////////////////////////////////////////////////
process carrera()
begin
file = fpg_menu;
graph = 4;
x = C_RESOLUCIONX/2;
y = 150;
loop
If (collision(type raton))
graph = 3;
If (mouse.left)
presentacion(1,0);
end
else
graph = 2;
end
frame;
end
end
//////////////////////////////////////////////////////
process cargar()
begin
file = fpg_menu;
graph = 5;
x = C_RESOLUCIONX/2;
y = 200;
loop
If (collision(type raton))
graph = 3;
If (mouse.left)
presentacion(1,0);
end
else
graph = 2;
end
frame;
end
end
//////////////////////////////////////////////////////
process salir()
begin
file = fpg_menu;
graph = 6;
x = C_RESOLUCIONX/2;
y = 250;
loop
If (collision(type raton))
graph = 3;
If (mouse.left)
presentacion(1,0);
end
else
graph = 2;
end
frame;
end
end
Si lo que quieres es matar todos los procesos con signal (all_process,s_kill) si solo quieres matar unos con
signal ( type nombre_proceso , s_kill )
Pues hay varias opciones para matar procesos: tienes let_me_alone, que mata a todos los procesos salvo al que usa esta función.
Pero la mejor es usar signal: cada vez que creas un proceso, este devuelve su ID, que puedes almacenar en una variable, por ejemplo:
int temp;
temp=titulo();
y luego puedes hacer un signal(temp,s_kill);
En este caso, te recomiendo que tengas una variable global (por ejemplo, menu_opcion) que valga 0, y en menu cambies
LOOP FRAME; END
por
While (menu_opcion==0)
frame;
end
Y luego que cada opción detecte si choca con el ratón, le hacen click y en ese caso, cambie menu_opcion por su valor. Acuérdate, en el menú, antes de hacer el while, de poner menu_opcion a cero, por si acaso.
Además, de esta forma, después del while puedes usar SWITCH/CASE para invocar el resto de funciones, no conviene que una parte del juego dependa de un proceso que va a morir, o del hijo o nieto del proceso que controla el juego entero.
muchas gracias por las respuestas tan utiles
pero entonces el codigo lo veis mas o menos bien asi?
Mejor si subes el ejemplo completo y funcional a MediaFire o similar, además así vas guardando versiones para la posteridad ;)
Los códigos a simple vista pueden parecer correctos, pero es mejor verlos funcionando. Veo que usas por ahí algún FPG así que con el código sólo no vale para probar.
Por cierto, bienvenido, creo que es la primera vez que veo tu nick pero has estado posteando estos días :P
yo lo haría así:
[code language="bennu"]
Process menu()
private
var=0;
Begin
objeto(fpg_menu,1,C_RESOLUCIONX/2,50);
boton(fpg_menu,2,C_RESOLUCIONX/2,100,3,&var,1);
boton(fpg_menu,4,C_RESOLUCIONX/2,150,3,&var,2);
boton(fpg_menu,5,C_RESOLUCIONX/2,200,3,&var,3);
boton(fpg_menu,6,C_RESOLUCIONX/2,250,3,&var,4);
while (var==0)
frame;
end
switch (var);
case 1:
...
end
...
end
signal(id,s_kill_tree); //lo mata a él y a los procesos que ha creado
End
//////////////////////////////////////////////////////
process objeto(file,graph,x,y)
begin
loop
frame;
end
end
//////////////////////////////////////////////////////
process boton(file,graph1,x,y,graph2,pointer var,val)
begin
loop
If (collision(type raton))
graph = graph2;
If (mouse.left)
*var=val;
end
else
graph = graph1;
end
frame;
end
end
[/code]
bueno pues aqui os dejo lo que tengo hasta el momento
http://www.mediafire.com/?zkjgjuak94o4sej
gracias windgate, por la bienvenida y por tus clases
Arg, lo he probado pero no me compila, ni usando el .bat para compilar y ejecutar ni pulsando F6 desde el Notepad++
¿Cómo lo ejecutas tú?
Por cierto, no recordaba quién eras, ahora caigo, me alegro de verte por aquí de vuelta ;)
a lo mejor es por la resolucion, a veces me ha pasado
yo lo hago con f6