Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: chuflun on July 01, 2010, 02:39:31 AM

Title: como mejorar este menu de opciones
Post by: chuflun on July 01, 2010, 02:39:31 AM
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
Title: Re: como mejorar este menu de opciones
Post by: JMP on July 01, 2010, 08:24:25 AM
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 )
Title: Re: como mejorar este menu de opciones
Post by: Drumpi on July 01, 2010, 12:20:27 PM
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.
Title: Re: como mejorar este menu de opciones
Post by: chuflun on July 01, 2010, 02:01:57 PM
muchas gracias por las respuestas tan utiles

pero entonces el codigo lo veis mas o menos bien asi?
Title: Re: como mejorar este menu de opciones
Post by: Windgate on July 10, 2010, 11:47:44 PM
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
Title: Re: como mejorar este menu de opciones
Post by: Prg on July 12, 2010, 02:40:41 AM
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]
Title: Re: como mejorar este menu de opciones
Post by: chuflun on July 17, 2010, 01:30:28 PM
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
Title: Re: como mejorar este menu de opciones
Post by: Windgate on July 21, 2010, 01:34:55 AM
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 ;)
Title: Re: como mejorar este menu de opciones
Post by: chuflun on July 23, 2010, 01:20:50 PM
a lo mejor es por la resolucion, a veces me ha pasado
yo lo hago con f6