Tiempo de espera

Started by FPintaluba, June 01, 2010, 09:56:09 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FPintaluba

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!

FreeYourMind


grisendo

#2
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]

FPintaluba

Justo lo que buscaba.

Muchas gracias grisendo!  ;D

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FPintaluba


Fede

MAS, MAS. Al fondo hay sitio.  ;D

Bienvenido.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

kim-elet-o

bienvenido a estos lares FPintaluba.
|/
|\im-elet-o el yayo programador.

FPintaluba