Comunidad de diseño web y desarrollo en internet online

preguntaSimple: sobre clasico evento .key_down, .key_up

Citar            
MensajeEscrito el 07 Ene 2010 12:40 am
digamos que en una clase tengo esto:

Código ActionScript :

            _stageRef.stage.addEventListener( KeyboardEvent.KEY_DOWN, _keyHandlerDown, false, int.MAX_VALUE);
            //Setting max-1 so this be after
            _stageRef.stage.addEventListener( KeyboardEvent.KEY_UP, _keyHandlerUp, false, (int.MAX_VALUE - 1));


y sus handlers serian estos:

Código ActionScript :

      private function _keyHandlerUp(e:KeyboardEvent):void {
         _pressedKeys[e.keyCode] = 1;
         trace("keyHanlderUp!");
      }
      private function _keyHandlerDown(e:KeyboardEvent):void {
         delete _pressedKeys[e.keyCode];
         trace("keyHanlderDown!");
      }


A como lo veo esta correcta y en principio funciona bien.
Basicamente lo que hacen los handlers es es grabar la tecla que ha sido presionada como metodo de un objeto, y me hace un trace que hubo una tecla presionada. El problema ocurre que cuando presiono mas de una tecla al mismo tiempo.
Por ejemplo, imaginen este proceso especifico:
-presiono la tecla A (output: keyHanlderDown! )
- luego despues de un seg. aprox. empieza a repetir los traces(se que es normal, que asi funciona, y que se puede arreglar con onEnterFrame)
-luego presiono la B sin soltar A (output: keyHanlderDown! )
-luego suelto la B sin soltar A (output: keyHanlderUp! )
-luego siguiendo la tecla A presionada (output: )
es decir, ya no es detectada
-suelto A (output: keyHanlderUp! )

Y entonces el proceso comienza de nuevo, si presiona A de nuevo, me vuelve a tracear "keyHanlderDown!".

Entonces mi duda seria por que al soltar B a deja de ser detectado, es normal?

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 03:34 am
Bueno, ya me fije. Ya hice a prueba desde un documento en blanco, y aqui se los paso por si quieren verlo

Código ActionScript :

package com.tests
{
   
   /**
    * ...
    * @author 
    */
   
   import flash.display.MovieClip;
   import flash.display.Stage;
   //import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;

   public class keyboardEvent extends MovieClip
   {
      public function keyboardEvent() {
         trace("!");
         stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler);
         stage.addEventListener (KeyboardEvent.KEY_UP, keyUpHandler);
      }
 
      function keyDownHandler (e:KeyboardEvent):void {
          trace("keyDownHandler!");

         /*keyDownText.text = 
         "Key code: " + e.keyCode + "\n" +
         "Ctrl status: " + e.ctrlKey + "\n" +
         "Key location: " + e.keyLocation + "\n" +
         "Shift key: " + e.shiftKey + "\n";*/
      }
 
      function keyUpHandler (e:KeyboardEvent):void {
         trace("keyUpHandler!");
         //keyUpText.text = "Key code: " + e.keyCode;
      }
   }
   
}


Pero en efecto, parece ser que es el comportamiento por defecto, pero no entiendo por que, no se si sea un error por defecto.

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 03:44 am
incluso lo pueden ver aqui:
http://www.flashessential.com/archives/80

presionar y soltar una tecla, mientras otra esta presionada, cancela el evento... seguire investigando.

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2010 09:57 am
Hola,
KeyboardEvent captura eventos del teclado entero, no de teclas individuales (sino lo habrían llamado KeyEvent, y habría que crear un evento para cada tecla).
Por eso cada vez que pulsas una tecla, cambia tu KeyboardEvent "e" por la nueva tecla pulsada, y por lo tanto los listener.
Eso mismo pasa en un editor de textos cualquiera: Si dejas pulsada la tecla "a", escribirá "aaaaaa"; si después mantienes pulsada "s" sin soltar "a", escribirá varias eses detrás de las aes, y al soltar la "s" deja de escribir aunque sigas manteniendo la tecla "a" presionada.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Ene 2010 06:59 pm
Ok, ya me fije y me di cuenta de eso. Bueno, aun me parece tonto, pero gracias. Ya busque una solucion a esto, gracias.

Por cpucpu

82 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.