Foros del Web » Creando para Internet » Flash y Actionscript »

onKeyDown tiene retraso, POR QUE ??

Estas en el tema de onKeyDown tiene retraso, POR QUE ?? en el foro de Flash y Actionscript en Foros del Web. peus eso.. actualmente detecto las presiones en teclas de las siguentes 2 maneras: metodo1 Código: this.onEnterFrame = function() { if (Key.isDown(Key.UP)) { trace("UP"); } } ...
  #1 (permalink)  
Antiguo 01/05/2008, 20:53
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 10 meses
Puntos: 5
onKeyDown tiene retraso, POR QUE ??

peus eso..
actualmente detecto las presiones en teclas de las siguentes 2 maneras:

metodo1
Código:
this.onEnterFrame = function() {
    if (Key.isDown(Key.UP)) {
        trace("UP");
    }
}
funciona de maravillas, aunque me forza a preguntrar por teclas especificas, y no si en general hay una tecla presionada


metodo2
Código:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
    updateAfterEvent();
    trace("DOWN -> Code: "+Key.getCode());
};
Key.addListener(keyListener);
funciona "bien"...me detecta cuando se teclea en general, sin tener q pregunatrle or alguna, ademas de porder saber cual fue presionada.....

pero este ultimo evento (onKeyDown) a diferencia de su homologo en mouse (onMouseMove), tiene u retraso de aprox. 1 segundo en detectar si una misma tecla sigue presionada.....


EJEMPLO:
si se utiliza el metodo1, al presionar una tecla, hace un trace contnuio del mensaje de uno dio
trace
trace
trace
trace
trace


Pero si se utiliza el metodo2, pasa lo siguiente:
trace........1 segundo despues
trace
trace
trace
trace
trace


VEN EL RETRASO?? por que sera?
__________________

  #2 (permalink)  
Antiguo 01/05/2008, 20:56
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 10 meses
Puntos: 5
Re: onKeyDown tiene retraso, POR QUE ??

por cierto, no hablo del retraso debido a la cantidad de frames por segundo (lease updateAfterEvent)

Sino, de un retraso que ocurre cuando se presiona una tecla y se mantiene presionada....tarda un tiempo en detectar que sigue presionada...parece un retraso por defecto
__________________

  #3 (permalink)  
Antiguo 03/05/2008, 10:22
Avatar de PabloSutra  
Fecha de Ingreso: octubre-2006
Ubicación: Guadalajara, México
Mensajes: 222
Antigüedad: 11 años, 2 meses
Puntos: 0
Re: onKeyDown tiene retraso, POR QUE ??

Que tal cpucpu, este retraso del que hablas suele ser por la configuracion de tu teclado en cuanto a la repeticion cuando dejas presionada una tecla, ya que he hecho varias aplicaciones con el listener del Key y no he tenido ese retraso del que hablas, entonces posiblemente es eso, te recomiendo que cheques la configuracion de tu teclado en cuanto a la repeticion, creo que es por ahi.
Espero te haya ayudado
SALUD!!!
  #4 (permalink)  
Antiguo 03/05/2008, 22:22
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 10 meses
Puntos: 5
Re: onKeyDown tiene retraso, POR QUE ??

ha.... pues me parece q tienes razon....
entonces, me surge otra incongnita

digamos, los desarrolladores de juegos flash, como le haran ellos para detectar cuando esta presionada una tecla??? digamos un PERSONAJE que se mueve a la izq. o derecha dependiendo de la tecla presionada.....

supongo tendrias que usar un metodo que no dependa de la velocidad del teclado....entonces me surge la idea de que un Key.isDown dentro de un onEnterFrame seria lo mejor....

este seria mi codigo:

Código:
this.onEnterFrame = function() {
    if (!Key.isDown(Key.LEFT) && !Key.isDown(Key.RIGHT)) {
        //trace("NO AVANZA");
        personaje2.stop();
        personaje2.piernaFront.stop();
        personaje2.piernaBack.stop();
    }
    if (Key.isDown(Key.LEFT)) {
            trace("LEFT");
        }
    if (Key.isDown(Key.RIGHT)) {
            trace("RIGHT");
    }
};
Tiene varios inconvenientes:
1.-el continuo onEnterFrame haciendo comprobaciones cada frame * segundo...en vez de un listener que lo hace solo cuando es invocado
2.- uff......antes con un onKeyDown getKey, lo metiamos en un switchCase y haciamos algo de acuerdo al caso y en en el default no haciamos nada....ahora hay que especificarlo pero probablemente mas largo, y VOY A LO MISMO, HAY QUE HACER COMPROBACIONES PARA SABER CUAL FUE PRESIONADO
3.- hay q comprobar cual fue presionado

El metodo que propuse sera el mas utilizado, o el mas logico/funcional???????
que opinan.
__________________

  #5 (permalink)  
Antiguo 04/05/2008, 20:32
Avatar de PabloSutra  
Fecha de Ingreso: octubre-2006
Ubicación: Guadalajara, México
Mensajes: 222
Antigüedad: 11 años, 2 meses
Puntos: 0
Re: onKeyDown tiene retraso, POR QUE ??

Que tal de nuevo cpucpu, de hecho saber cuando fue presionado con un listener no es nada del otro mundo y muchos lo utilizan mas o menos asi:

Cita:
var teclas:Object = new Object();
teclas.onKeyDown = function() {
switch (Key.getCode()) {
case Key.LEFT :
trace("IZQ");
break;
case Key.RIGHT :
trace("DERECHA");

}
};
Key.addListener(teclas);
Eso seria con switch, ya con if pues seria
Cita:
if(Key.getCode() == Key.LEFT){
trace("izquierda");
}
En fin, en mi opinion me gusta mas usar el listener, siempre trato de evitar los enterFrame, espero te haya servido la info

SALUD!!!!
  #6 (permalink)  
Antiguo 04/05/2008, 23:48
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 10 meses
Puntos: 5
Re: onKeyDown tiene retraso, POR QUE ??

no, no me entendiste.

Se utilizar el listener, de hecho es el metodo2 que propuse....
Pero te comento, que al utilizar el listener, ocurre un retraso, que se debe a la configuracion del teclado.

Tal retraso no ocurre con onEnterFrame, por eso es una pregunta abierta, para ver si quienes han programado juegos, como le hacen para evitar ese retraso, onEnterframe es la solucion??
__________________

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:51.