Ver la versión completa : Muestra de un inicio + menu
Haohmaru
18/07/2007, 13:17
Bueno, empiezo a tener bastante tiempo libre asi que me he puesto a programar en fenix para la 2X. De momento quiero mostrar una intro y luego un menu, pero no se si lo que pongo esta realmente bien enfocado, asi que voy a poner el codigo aqui para ver que os parece:
PROGRAM worki;
GLOBAL
file = grf01; //Grafico de Menu principal
BEGIN
set_title("Prueba");
set_mode(320,240);
grf01=load_fpg("nombre.fpg"); //Cargamos el gráfico
string txtStart="Press Start"; //Asignamos a la variable un valor.
int tmnu;
//Entramos en bucle
Loop
put_screen(grf01,1); //mostramos grafico de menu
if(key(_esc)) //si se toca escape' se sale del bucle
tmnu=0;
break;
else //si no
if(key(_enter)) //Si se toca enter
tmnu=1
break;
end
end
if (tmnu=1)
mostrarMenuJuego(); //Se muestra el menu de juego
end
frame;
End
Procces mostrarMenuJuego() //Proceso que muestra el menu de juego.
BEGIN
int i=2; //Contador.
write(tipo fnt,pos_x,pos_y, txtStart)
Loop
if(i=4)
i=2;
else
graph=i;
x=320;
y=240;
z=1
i++;
end
if(key(_enter))
txtStart="";
unload_fpg(grf01);
break;
end
frame;
End
comenzarJuego();
END
.
.
.
.
END
Saludos y gracias de antemano.
BUHOnero
18/07/2007, 13:19
Está mal estructurado :D
Haohmaru
18/07/2007, 13:21
Dime que esta mal porfavor, como lo harias tu?
BUHOnero
18/07/2007, 13:22
PROGRAM worki;
GLOBAL
file = grf01; //Grafico de Menu principal
BEGIN
set_title("Prueba");
set_mode(320,240);
grf01=load_fpg("nombre.fpg"); //Cargamos el gráfico
string txtStart="Press Start"; //Asignamos a la variable un valor. -> quitaría esto de string, en Fenix no tienes que declrar tipos de variable :)
int tmnu;
//Entramos en bucle
Loop
put_screen(grf01,1); //mostramos grafico de menu
if(key(_esc)) //si se toca escape' se sale del bucle
tmnu=0;
break;
else //si no
if(key(_enter)) //Si se toca enter
tmnu=1
break;
end
end
if (tmnu=1)
mostrarMenuJuego(); //Se muestra el menu de juego
break; // si no seguirá ejecutando este bucle, y seguiras podiendo apretar esc y enter
end
frame;
End
END
Procces mostrarMenuJuego() //Proceso que muestra el menu de juego.
BEGIN
int i=2; //Contador.
write(tipo fnt,pos_x,pos_y, txtStart)
Loop
if(i=4)
i=2;
else
graph=i;
x=320;
y=240;
z=1
i++;
end
if(key(_enter))
txtStart="";
unload_fpg(grf01);
break;
end
frame;
End
comenzarJuego();
END
.
.
.
.
- No estoy muy seguro... el break que he puesto despues de apretar enter no se si es fiable, pero ahora mismo es lo que se me ocurre
- Los procesos son individuales, no van dentro del Program, cada Process tiene su Begin y su End
- Añadiría otra cosa: cuando pulses enter no hagas un break, haz un exit(0);
Haohmaru
18/07/2007, 13:23
ya esta? Por lo demas tiene pinta de que "esta bien"?
BUHOnero
18/07/2007, 13:28
Otra cosa... este código lo has hecho sin compilar ni nada, no¿? es que hay errores que no te dejarán compilar, como las comparaciones, hay que poner if(i==4), con un doble igual
Haohmaru
18/07/2007, 13:28
Otra cosa... este código lo has hecho sin compilar ni nada, no¿? es que hay errores que no te dejarán compilar, como las comparaciones, hay que poner if(i==4), con un doble igual
No aun no he compilado, lo estoy haciendo en el notepad porque ahora mismo estoy en el curro.
Lo que quiero hacer ahi, es mostrar varias imagenes seguidas unas de otras (como una animacion), y cuando llege al ultimo map del fpg vuelve a mostrar el primero, en la posicion x,y y por encima de la anterior mostrada(z=1 por encima de put_screen(grf01,1);)
BUHOnero
18/07/2007, 13:32
Y el file= tambien quítalo, déjalo simplemente: grf01=load_fpg("nombre.fpg");
< - >
Y te falta poner el set_fps
Haohmaru
18/07/2007, 13:33
Y el file= tambien quítalo, déjalo simplemente: grf01=load_fpg("nombre.fpg");
< - >
Y te falta poner el set_fps
A cuantos fps se puede poner la 2X?
BUHOnero
18/07/2007, 13:34
A cuantos fps se puede poner la 2X?
Pos depende de la cantidad de procesos que cargues, nosotros en el Camelot Warriors lo tenemos 50 :D
Haohmaru
18/07/2007, 13:39
Bueno, te cuento lo que intento hacer en ese bucle:
PD:No aun no he compilado, lo estoy haciendo en el notepad porque ahora mismo estoy en el curro.
Lo que quiero hacer ahi, es mostrar varias imagenes seguidas unas de otras (como una animacion), y cuando llege al ultimo map del fpg vuelve a mostrar el primero, en la posicion x,y y por encima de la anterior mostrada(z=-1 por encima de put_screen(grf01,1); )
lo pongo asi porque no se si, yo al mostrar imagenes, si muestro otra, la anterior sigue en memoria o como queda, pues las imagenes que muestro aqui son del mismo tamaño.
BUHOnero
18/07/2007, 13:53
Bueno, te cuento lo que intento hacer en ese bucle:
PD:No aun no he compilado, lo estoy haciendo en el notepad porque ahora mismo estoy en el curro.
Lo que quiero hacer ahi, es mostrar varias imagenes seguidas unas de otras (como una animacion), y cuando llege al ultimo map del fpg vuelve a mostrar el primero, en la posicion x,y y por encima de la anterior mostrada(z=-1 por encima de put_screen(grf01,1); )
lo pongo asi porque no se si, yo al mostrar imagenes, si muestro otra, la anterior sigue en memoria o como queda, pues las imagenes que muestro aqui son del mismo tamaño.
Al final lo he entenido, la Z no la necesitas, ni decir cada vez las coordenadas, y cambiando el valor de graph y haciendo un frame; se borra el anterior y se pone el nuevo, asi de simple:
i=2;
loop
if(i==4)
i=2;
else
graph=i;
i++;
end
frame;
end
Pero ten en cuante que si pones a 50 frames, haras el cambio de imagen a un ritmo de 50 cambios por segundo :) y en este bucle solo se muestran 3 imágenes (i=2,i=3,i=4 y vuelta a empezar)
< - >
Lo haría así:
Procces mostrarMenuJuego() //Proceso que muestra el menu de juego.
BEGIN
i=2; //Contador.
write(fnt,pos_x,pos_y,txtStart);
While(!key(_enter))
if(i==4)
i=2;
end
graph=i;
i++;
frame;
end
// aquí pones lo que quieres que haga al pulsar enter
comenzarJuego();
frame;
END
Haohmaru
18/07/2007, 13:56
Pero ten en cuante que si pones a 50 frames, haras el cambio de imagen a un ritmo de 50 cambios por segundo y en este bucle solo se muestran 3 imágenes (i=2,i=3,i=4 y vuelta a empezar)
Mmmm ahio me perdi, entiendo lo que dices pero no porque.
BUHOnero
18/07/2007, 14:03
Mmmm ahio me perdi, entiendo lo que dices pero no porque.
Perdón, solo mostraras 2 imágenes (i=2 y i=3).
A ver... si pones 50 fps quiere decir que el programa ejecutara 50 frames cada segundo, esto quiere decir que en ese bucle el cambio entre imágenes será en cada frame, o sea, cada 1/50 segundos, o sea, rapidísimo.
Para controlar estas cosas yo uso una varialbe temporal, y solo hago el i++ (o sea, el cambio de imagen) cada X frames, así en vez de hacerlo 50 veces por segudo puedo hacer que se haga 25 veces por segundo, como fuciona:
tmp=0;
i=2;
loop
if(tmp mod 2)
graph=i;
i++;
if(i==4)
i=2;
end
tmp=0;
else
tmp++;
end
frame;
end
con este codigo hago que se ejecute el cambio de imagen (graph=i) cada dos frames, cuando tmp sea multiple de 2, podrías poner if(tmp mod 3) y sería cada 3 frames :D
Haohmaru
18/07/2007, 14:04
Perdón, solo mostraras 2 imágenes (i=2 y i=3).
A ver... si pones 50 fps quiere decir que el programa ejecutara 50 frames cada segundo, esto quiere decir que en ese bucle el cambio entre imágenes será en cada frame, o sea, cada 1/50 segundos, o sea, rapidísimo.
Para controlar estas cosas yo uso una varialbe temporal, y solo hago el i++ (o sea, el cambio de imagen) cada X frames, así en vez de hacerlo 50 veces por segudo puedo hacer que se haga 25 veces por segundo, como fuciona:
tmp=0;
i=2;
loop
if(tmp mod 2)
graph=i;
i++;
tmp=0;
else
tmp++;
end
frame;
end
con este codigo hago que se ejecute el cambio de imagen (graph=i) cada dos frames, cuando tmp sea multiple de 2, podrías poner if(tmp mod 3) y sería cada 3 frames :D
Ahhh ya entendi. Vale pues sigo dandole al codigo. Muchas gracias por las clases particulares xDD.
BUHOnero
18/07/2007, 14:05
Además me parece recordar que puedes simplificar aún más, puedes augmentar directamente graph, no hace falta asignar una variable i.
Puedes hacer graph++ en vez de ir augmantendo una varialbe i y asignandola a graph cada vez
Haohmaru
18/07/2007, 14:33
Además me parece recordar que puedes simplificar aún más, puedes augmentar directamente graph, no hace falta asignar una variable i.
Puedes hacer graph++ en vez de ir augmantendo una varialbe i y asignandola a graph cada vez
anda eso esta bien saberlo. Gracias!!
Una cosa mas: las variables no se pueden declarar despues del begin, debes crear una seccion entre la linea process y la linea begin para declararlas como privadas:
process el_que_sea ()
private
tipo mi_variable;
begin
(...)
Recuerda que en Fenix hay tres tipos distintos de variables (4 en las ultimas versiones): globales, locales y privadas. Eso deberias mirarlo en algun de los manuales, porque es demasiado largo de explicar en el foro, y ando un poco mal de tiempo, sorry :(
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.