Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: jomagopo on June 01, 2012, 12:32:30 AM

Title: Re:Hacer una pausa de n segundos (Solucionado)
Post by: jomagopo on June 01, 2012, 12:32:30 AM
Hola a todos.
Siguiendo el manual de Osk hice un ejemplo que muestra imagenes aleatorias obtenidas desde un archivo fpg.
Funcionar, funciona, pero las imagenes se muestran muy rapido.
La duda que tengo es si se puede hacer una pausa de n segundos como se haria en C con sleep(5000).
Aqui os pongo el codigo y de paso me comentais si hay algo que este mal.

Import "mod_video";
Import "mod_screen";
Import "mod_map";
Import "mod_rand";
Import "mod_key";

Process Main()
private
int imagen;
end

begin
set_fps(32,0);
set_mode(640,480,32);
imagen=load_fpg("playas.fpg");

Repeat // Mostramos las imagenes hasta que se pulsa la tecla ESC
put_screen(imagen,rand(1,4));
frame;
        Until(key(_esc))

end


Salu2.
Title: Re:Hacer una pausa de n segundos
Post by: Rein (K´)ah Al-Ghul on June 01, 2012, 01:31:32 AM
una opcion es usar timers
http://wiki.bennugd.org/index.php?title=Timer (http://wiki.bennugd.org/index.php?title=Timer)


pones el timer elegido en 0

preguntas si el tiempo es mayor o igual al que necesitas
cambias el fotograma
lo vuelves a poner en 0
vuelves arriba (a la pregunta)
Title: Re:Hacer una pausa de n segundos
Post by: gecko on June 01, 2012, 01:37:42 AM
en ese mismo ejemplo, donde dice frame; podes cambiarlo por frame(5000); o un numero mas grande.

Lo que hace eso es que lo que esta dentro del repeat en vez de ejecutarse una vez por frame, se ejecuta una vez cada 5000 frames.

(porfa corregirme si estoy confundido)
Title: Re:Hacer una pausa de n segundos
Post by: KeoH on June 01, 2012, 10:42:24 AM
Quote from: gecko on June 01, 2012, 01:37:42 AM
en ese mismo ejemplo, donde dice frame; podes cambiarlo por frame(5000); o un numero mas grande.

Lo que hace eso es que lo que esta dentro del repeat en vez de ejecutarse una vez por frame, se ejecuta una vez cada 5000 frames.

(porfa corregirme si estoy confundido)


frame(3200); para hacer una pausa de 1 segundo porque tiene puesto el programa a 32 fps , si no me equivoco es que ese proceso "necesitaría 32 frames en pintarse"
Title: Re:Hacer una pausa de n segundos
Post by: jomagopo on June 01, 2012, 07:23:40 PM
Muchas gracias a todos por responder tan rapido.
He probado las 2 maneras que comentais.
Poniendo Wait(300) y Frame(9600).
En los 2 casos, si hace la espera el tiempo que debe, pero no sale de la aplicacion al pulsar la tecla Esc, la tengo que pulsar varias veces para que funcione.


Import "mod_video";
Import "mod_screen";
Import "mod_map";
Import "mod_rand";
Import "mod_key";
Import "mod_timers";

Process Main()
private
int imagen;
end

begin
set_fps(32,0);
set_mode(640,480,32);
imagen=load_fpg("playas.fpg");

Repeat // Mostramos las imagenes hasta que se pulsa la tecla ESC
put_screen(imagen,rand(1,4));
//wait(300);
FRAME(9600);                // Espera un rato
        Until(key(_esc))

end

Function int wait(int t)
Begin
    t += timer[0];
    While(timer[0]<t) frame; End
    return t-timer[0];
End


Estara el problema en el bucle repeat ?
Title: Re:Hacer una pausa de n segundos
Post by: SplinterGU on June 01, 2012, 07:53:25 PM
wait en bennugd?

no recuerdo haberla puesto, seguramente pusiste wait y estas usando el mismo dcb compilado con la version frame.
Title: Re:Hacer una pausa de n segundos
Post by: jomagopo on June 01, 2012, 09:31:08 PM
wait es una funcion (al parecer es una funcion de usuario) que puse al final del codigo del ejemplo, la saque de:
http://wiki.bennugd.org/index.php?title=Timer (http://wiki.bennugd.org/index.php?title=Timer)

Los dcb los he borrado cada vez que he compilado si he hecho algun cambio en el codigo.
Y la cosa sigue igual, si se muestran las imagenes con una pausa de segundos entre ellas, pero la tecla Esc no funciona a la primera.
Asi es que cada vez estoy mas perdido.

Title: Re:Hacer una pausa de n segundos
Post by: Kloppix on June 01, 2012, 09:34:37 PM
Splinter: Wait es como llamó a una función en su programa.



Creo que programa tarda en responder porque con tu wait o con frame(9600) estas diciendo al programa que no haga nada por un tiempo. Ni siquiera leer pulsaciones del teclado. Podrías poner un " if(key(_esc)) break; end "


Me parece que el wait es complicarse un poco. Yo haría algo como:



   Repeat // Mostramos las imagenes hasta que se pulsa la tecla ESC
      put_screen(imagen,rand(1,4));
                timer[0]=0;
                while (timer[0]<300)
                  if(key(_esc)) break; end
                  frame;
                end;
        Until(key(_esc))
Title: Re:Hacer una pausa de n segundos
Post by: Kloppix on June 01, 2012, 09:39:55 PM
Jomagopo, contestaste antes de que terminara de escribir :)


No, wait es simplemente como llamaron a la función. Lo tienes al final de tu programa



Function int wait(int t)
Begin
    t += timer[0];
    While(timer[0]<t) frame; End
    return t-timer[0];
End
Title: Re:Hacer una pausa de n segundos (Solucionado)
Post by: jomagopo on June 01, 2012, 09:51:11 PM
Antes quise decir que wait era una funcion creada por un usuario, esta claro que le llamaron wait en este caso.

He probado lo que a comentado Kloppix y ya funciona a la perfeccion.
Poco a poco ire aprendiendo.
Muchas gracias a todos.
;)
Title: Re:Hacer una pausa de n segundos (Solucionado)
Post by: KeoH on June 02, 2012, 12:34:56 AM
Yo creo q otra manera de q te funcione la tecla escape durante las pausas .. es haciendo q sea otro proceso el que compruebe la pulsacion de esa tecla. Porq si la comprobacion y el frame(9600) estan en el mismo proceso, la ejecucion esta parada en el frame, y no llega a la comprobación ... no se si me esplico.... poniendo la comprobacion en otro proceso q tenga frame normal (frame;) puedes hacer q la condicion se compruebe en cada fotograma, y no cada 96 fotogramas (3 seg) q es lo q ocurre así
Title: Re:Hacer una pausa de n segundos (Solucionado)
Post by: jomagopo on June 02, 2012, 12:56:06 AM
Tienes razon en lo que comentas, KeoH.
Tuve que retocar el codigo con lo que comento antes Kloppix.
Este es el codigo final, funcionando bien, perdon por no ponerlo antes.

Import "mod_video";
Import "mod_screen";
Import "mod_map";
Import "mod_rand";
Import "mod_key";
Import "mod_timers";

Process Main()
private
int imagen;
end

begin
set_fps(32,0);
set_mode(640,480,32);
imagen=load_fpg("playas.fpg");

Repeat // Mostramos las imagenes hasta que se pulsa la tecla ESC
put_screen(imagen,rand(1,4));
        timer[0]=0;
while (timer[0]<300)
if(key(_esc)) break; end
frame;
end;
Until(key(_esc))

end


Gracias a todos por la ayuda.
Title: Re:Re:Hacer una pausa de n segundos (Solucionado)
Post by: SplinterGU on June 02, 2012, 12:58:16 AM
juro que mire el codigo y no habia visto esa funcion escrita... curiosamente el codigo esta editado despues de mi comentario...
Title: Re:Hacer una pausa de n segundos (Solucionado)
Post by: jomagopo on June 02, 2012, 01:17:07 AM
No edite el codigo del primer post, de verdad, para que iva a mentir.
Lo que hice fue editar el primer post para poner (solucionado) en el asunto.

Edito:
Es en mi segundo post donde esta puesta la funcion wait y ese post no esta editado.
Title: Re:Re:Hacer una pausa de n segundos (Solucionado)
Post by: SplinterGU on June 02, 2012, 03:17:57 AM
no, no, simplemente se me paso a mi... solo que el hecho de que este editado puede dar a confusion... pero se me paso a mi...