Comunidad de diseño web y desarrollo en internet online

Dtectar la presión de las teclas de forma discontinua

Citar            
MensajeEscrito el 19 Feb 2010 07:38 pm
Hola, tenía una duda que imaginé que los supermagnificos, magníficos y todos podrían ayudarme.
Lo que yo estaba intentando haciendo es que por ejemplo, un Mc se moviera en la cordenada x hacia al lado que sea cuando pulsaras discontinuamente las teclas del teclado. Me refiero a que este Mc se moviera hacia algun lado si pulsas con rapidez la tecla, por ejemplo derecha. Si mantienes pulsado no hace nada, pero si la clicas muchas veces seguidas con rapidez se mueve el mc.
¿Alguien me daría una idea para hacerlo con AS 2?

Muchisimas gracias!!!!

Por SilSal

87 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Feb 2010 12:13 pm
¿Nadie sugieres?

Gracias

Por SilSal

87 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Feb 2010 12:17 pm
También me apañaría si me ayudaran a encontrar el modo de que Flash detecte, cunado presiones, haga una acción, pero solo una vez. ¿No hay ninguna función que te haga una acción solo una vez?

Muchísimas gracias!

Por SilSal

87 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Feb 2010 07:15 pm
Hola,
para detectar que sólo has presionado una vez tienes que usar una variable auxiliar, y para saber el espacio de tiempo entre dos pulsaciones puedes usar un Date. Aquí te dejo un ejemplo en el que se mueve un clip llamado mc si pulsamos varias veces la tecla de dirección derecha en intervalos de medio segundo:

Código ActionScript :

var oldTime:Number;
var newTime:Number;
var rightPressed:Boolean;

var keyListener:Object = new Object();
keyListener.onKeyDown = keyDownHandler;
keyListener.onKeyUp = keyUpHandler;
Key.addListener(keyListener);

function keyDownHandler():Void
{
   if (isPressed) return;
   if(Key.getCode() == Key.RIGHT)
   {
      newTime = new Date().getTime();
      //Si entre las 2 pulsaciones han pasado menos de 500 milisegundos
      //mueve el movieclip llamado mc un pixel a la derecha:
      if (newTime - oldTime < 500) mc._x++;
      oldTime = newTime;
      rightPressed = true;
   }   
}

function keyUpHandler():Void
{
   rightPressed = false;
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Feb 2010 07:16 am
Muchísimas gracias , pero el código hace lo mismo que si hicieras una orden normal de derecha.

Gracias

Por SilSal

87 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Feb 2010 07:29 am

SilSal escribió:

Muchísimas gracias , pero el código hace lo mismo que si hicieras una orden normal de derecha.

Gracias

No hace lo mismo. Con este código, si pulsas dos veces seguidas la tecla derecha antes de que pasen 500 milisegundos el clip se mueve, pero si tardas más de 500 milisegundos no se mueve. Además previene el efecto de dejar pulsada la tecla.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Feb 2010 12:30 pm
Gracias pero no es eso lo que intento hacer.
Lo que intentó es que el mc no se mueva si mantienes presionada la tecla Derecha. Solo se mueve si la pulsas continuamente más rápido o lento. Aunque cada pulso de la tecla este a 1 segundo de tiempo entre uno y el otro, el personaje avanza.

Gracias

Por SilSal

87 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Feb 2010 12:51 pm

SilSal escribió:

Gracias pero no es eso lo que intento hacer.
Lo que intentó es que el mc no se mueva si mantienes presionada la tecla Derecha. Solo se mueve si la pulsas continuamente más rápido o lento. Aunque cada pulso de la tecla este a 1 segundo de tiempo entre uno y el otro, el personaje avanza.

Gracias

Perdona, el problema es que hay una errata en el código que puse. Dentro de la función keyDownHandler pone:

Código ActionScript :

if (isPressed) return;

y debería ser:

Código ActionScript :

if (rightPressed) return;

Por eso te funcionaba igual que antes de usar el código. De todos modos, si sólo quieres que detecte que se ha pulsado una vez, sin que calcule el tiempo que transcurre entre las pulsaciones, te bastaría con esto:

Código ActionScript :

var rightPressed:Boolean;

var keyListener:Object = new Object();
keyListener.onKeyDown = keyDownHandler;
keyListener.onKeyUp = keyUpHandler;
Key.addListener(keyListener);

function keyDownHandler():Void
{
   if (Key.getCode() != Key.RIGHT) return;
   if (rightPressed) return;
   trace("pulsado una vez");
   rightPressed = true;
}

function keyUpHandler():Void
{
   rightPressed = false;
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Feb 2010 03:47 pm
Muchísimas gracias isidoro!!!!!!!!!!
Era el último código lo que estaba intentando!!! Funciona a la perfección!!!

De verdad que muchísimas gracias!!

Por SilSal

87 de clabLevel



 

chrome

 

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