Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: FPintaluba on June 01, 2010, 09:56:09 PM

Title: Tiempo de espera
Post by: FPintaluba on June 01, 2010, 09:56:09 PM
Hola a todos, soy nuevo usando Bennu y me esta cayendo bastante bien, felicitaciones.

Bueno tengo una duda piadosa, a la hora de chequear los eventos del teclado, como el de un cursor.

Cuando chequeamos si key(_up) se presionó y hacemos el movimiento que debe hacer el cursor, lo hace todo seguido, no hace una pausa, a ver si me explico.

Queriendo hacer que por cada vez que se presione key(_up) haga cursor.y = cursor.y - 20;
Sabiendo que es un cursor, la idea es que se apriete la tecla de arriba, y espere a que vuelvas a teclearla de nuevo para moverse otros 20px en Y.
Dejandolo asi, al dejar un momento bastante corto apretada la tecla, hace todo de recorrido

Probe con frame(2000); por ejemplo, para que se demore aunque sea cuando se presione la tecla y no haga todo de corrido, funciona.

Pero mi pregunta es, es la manera mas eficiente y correcta de hacerlo?

Gracias por leer!
Title: Re: Tiempo de espera
Post by: FreeYourMind on June 01, 2010, 10:27:48 PM
Welcome to your DOOM!

(http://farm1.static.flickr.com/172/375444707_310f142f46.jpg?v=0)
Title: Re: Tiempo de espera
Post by: grisendo on June 01, 2010, 10:46:00 PM
No me queda claro si quieres hacer que solo se mueve cada vez que pulses (que llamaré BLOQUEO), o también dejándolo pulsado pero más lento (que llamaré RALENTIZACIÓN).

La primera forma de BLOQUEO te puede ser útil, pero también puede darte quebraderos de cabeza si haces cosas complicadas:

[code language="bennu"]
LOOP
   ...
   IF(key(_up))
       y-=20;
       WHILE (key_up)) // Mientras no la sueltes
           FRAME;
       END
   END
   ....
   FRAME;
END
[/code]

Y la segunda opción de BLOQUEO (posiblemente yo haría esta, pese a tener una variable más)

[code language="bennu"]
PRIVATE
   int pulsando_arriba;
BEGIN
...
pulsando_arriba = 0;
LOOP
   ...
   IF(key(_up))
        IF(pulsando_arriba == 0)
            pulsando_arriba = 1;
            y -= 20;
        END
   ELSE
       pulsando_arriba = 0;
   END
   ...
   FRAME;
END
[/code]

Y también te dejo una forma para la opción de RALENTIZACIÓN (cambia el valor 50 por el que te convenga):

[code language="bennu"]
PRIVATE
   int contador_arriba;
BEGIN
   contador_arriba = 50;
   LOOP
       IF(key(_up) AND contador_arriba == 50)
           contador_arriba=0;
           y-=20;
       END
       contador_arriba++;
       IF(contador_arriba==51) // No pasarse de 50
           contador_arriba = 50;
       END
       FRAME;
   END
END
[/code]
Title: Re: Tiempo de espera
Post by: FPintaluba on June 01, 2010, 11:38:36 PM
Justo lo que buscaba.

Muchas gracias grisendo!  ;D
Title: Re: Tiempo de espera
Post by: SplinterGU on June 02, 2010, 12:02:24 AM
bienvenido!
Title: Re: Tiempo de espera
Post by: FPintaluba on June 02, 2010, 02:10:14 AM
Gracias Splinter!  :D
Title: Re: Tiempo de espera
Post by: Fede on June 02, 2010, 05:18:41 AM
MAS, MAS. Al fondo hay sitio.  ;D

Bienvenido.
Title: Re: Tiempo de espera
Post by: kim-elet-o on June 02, 2010, 07:53:52 PM
bienvenido a estos lares FPintaluba.
Title: Re: Tiempo de espera
Post by: FPintaluba on June 02, 2010, 10:04:59 PM
Gracias!  :D