Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: NesKy on November 29, 2010, 03:42:12 PM

Title: El protagonista muere
Post by: NesKy on November 29, 2010, 03:42:12 PM
Buenas,

Tengo un problema con el timer[0]. Estoy intentando hacer que al morir el protagonista, se congele el scroll y al cabo de 2 segundos renazca el protagonista al principio del scroll y éste se reinicie de nuevo. Este es el código:

PROCESS Main()
Private
   int idstrack;
END
BEGIN
...
     LOOP
IF(exists(type protagonista)==0)
signal(idstrack,S_FREEZE);
timer[0]=0;
IF(timer[0]>=200)
idstrack.x=scroll[0].x0;
signal(idstrack,S_WAKEUP);
protagonista();
END
                END
                FRAME;
     END
END
//El idstrack es el identificador del proceso que sigue el scroll.

Para comprobar que pasaba, he hecho que escriba en pantalla el valor de timer[0] y al morir el prota, efectivamente se pone a 0 pero no se "reinicia", se queda a 0. Repasando el manual pone que el proceso timer se inicia al ejecutar el programa, pero no entiendo porque no se reinicia cuando le das valor 0... Puede que sea algo relacionado con el FRAME?

En el código que veis, al morir el prota solo para el scroll.

Quote from: MANUALUn temporizador es un cronómetro programable accesible en todo momento. Bennu dispone de 10 temporizadores accesibles a través de una tabla de variables globales enteras llamadas TIMER (desde timer[0] a timer[9]), siempre y cuando se importe el módulo "mod_timers". Estos temporizadores siempre se inicializan automáticamente al comenzar el programa al valor 0 y se incrementan automáticamente 100 veces por segundo. En cualquier momento puede cambiarse el valor de uno de ellos, por ejemplo inicializándolo de nuevo a 0, para controlar una cantidad de tiempo concreta.
Title: Re: El protagonista muere
Post by: DCelso on November 29, 2010, 03:46:33 PM

PROCESS Main()
Private
   int idstrack;
END
BEGIN
...
     LOOP
IF(exists(type protagonista)==0)
signal(idstrack,S_FREEZE);
timer[0]=0;
                        loop
                           IF(timer[0]>=200)
idstrack.x=scroll[0].x0;
signal(idstrack,S_WAKEUP);
         protagonista();
                                 break;
       END
                               frame;
                      end
                END
                FRAME;
     END
END
Title: Re: El protagonista muere
Post by: DCelso on November 29, 2010, 03:49:12 PM
O bien,

PROCESS Main()
Private
   int idstrack;
END
BEGIN
...
     LOOP
IF(exists(type protagonista)==0)
signal(idstrack,S_FREEZE);
timer[0]=0;
                           while(timer[0]<200)
                                 frame;
       END
idstrack.x=scroll[0].x0;
signal(idstrack,S_WAKEUP);
        protagonista();
                END
                FRAME;
     END
END
Title: Re: El protagonista muere
Post by: DCelso on November 29, 2010, 03:51:58 PM
Tu código no hacía lo que querías, porque al morir el prota, exist (type protagonista) siempre es 0 y siempre vuelves a setear el timer a 0, por lo tanto siempre va a valer 0 y nunca valdrá 201 para entrar a crearlo.
Title: Re: El protagonista muere
Post by: NesKy on November 29, 2010, 04:01:05 PM
Ahora funciona ok. Bueno, almenos esta vez me he acercado un poco mas.

Gracias!
Title: Re: El protagonista muere
Post by: laghengar on November 29, 2010, 09:45:00 PM
DIOSSSSSSSS, SPOILERSSSSSSSSS
Title: Re: El protagonista muere
Post by: NesKy on November 30, 2010, 03:53:52 PM
Quote from: laghengar on November 29, 2010, 09:45:00 PM
DIOSSSSSSSS, SPOILERSSSSSSSSS
Dado el argumento actual de mi juego, sí, es el spoiler mas grande que he dado jaja.
Title: Re: El protagonista muere
Post by: DCelso on November 30, 2010, 04:26:41 PM
por?
Title: Re: El protagonista muere
Post by: NesKy on November 30, 2010, 04:43:14 PM
Quote from: DCelso on November 30, 2010, 04:26:41 PM
por?
Basicamente porque no tiene argumento.