Comunidad de diseño web y desarrollo en internet online

Duda con doble presión de tecla

Citar            
MensajeEscrito el 21 Mar 2013 08:37 pm
Hola foro de Cristalab, agradezco nuevamente que lean este tópico, sin su ayuda, muchas veces no podría haber terminado líneas.

Tengo una duda respecto a una acción que no resulta exactamente como yo quiero.

Lo que sucede es que estoy haciendo un juego de peleas... Pero antes que cambien de página, básicamente ya tengo el 70% del proyecto, así que no piensen que soy de esas personas que piden que les hagan todo.

Bueno continuando con el tema, quiero hacer la acción "dash", donde si presionas ["adelante", "adelante"] o ["atrás", "atrás"], el jugador corre o salta hacia atrás.

Creé este código.

Código ActionScript :

//>>> VAR
ad = Key.RIGHT;
at = Key.LEFT;
// Combinación de teclas
dash_ad = [ad, ad];
dash_at = [at, at];
//>>> KEY LISTENER
/* Key Listener me ayuda a crear pequeñas pausas
y da mejores resultados que "Key.isDown()" */
var keyListener = new Object();
Key.addListener(keyListener);
keyListener.onKeyDown = function() {
   TP = Key.getCode();
}
keyListener.onKeyUp = function() {
   TP = false;
}
//>>> FUNCIONES
onEnterFrame = function() {
   /* Este da el tiempo límite de tecla, si pasa más del tiempo
   la combinación debe reiniciarse y comenzarla de nuevo.*/
   if (t < getTimer()) {
      dash_ad_combo = 0;
      dash_at_combo = 0;
      delete this.t;
   }
   /* Aquí toma en cuenta cada presión de tecla con "Key.getCode();"
   para realizar la combinación, si una tecla es incorrecta, se suspende */
   // Presión de tecla para hacer la acción
   if (TP == (dash_ad[dash_ad_combo])) {
      this.t = getTimer()+500;
      this.dash_ad_combo++;
   } else if (TP == (dash_at[dash_at_combo])) {
      this.t = getTimer()+500;
      this.dash_at_combo++;
   }
   /* Por último, si la presión de teclas resulta correcta,
   entonces se realiza la acción */
   if (dash_ad_combo >= dash_ad.length) {
      trace("dash_adelante");
   } else if (dash_at_combo >= dash_at.length) {
      trace("dash_atrás");
   }
};


Usé la función "trace();" para no implicar más acciones y sea más rápido el código de usar.

Pero seguramente se preguntan, ¿Dónde esta el problema?, bueno, digamos que yo quiero avanzar o ir hacia atrás, mantengo presionado "derecha" para hacerlo y realiza el "dash", pero se supone que este se realiza si presiono dos veces "derecha", no si la presiono continuamente.

Entonces mi duda. ¿Cómo puedo resolver esta acción? Para que cuando haga una doble presión de tecla realice la acción, como ejemplo, el "doble clic" del ratón.

Espero me haya explicado. Saludos y Gracias.

Por peon007

40 de clabLevel



Genero:Masculino  

Programador & Dibujante

chrome
Citar            
MensajeEscrito el 22 Mar 2013 09:27 am
Mmmmm, ¿no se podría hacer con un keylistener y una o dos variables? Me explico.

Declaras dos variables a false. Por ejemplo:
paso 1 = false;
dash = false;
Luego creas un keylistener que, cuando oiga la primera presión, ponga el paso 1 en true, y cuando el paso 1 esté en true y pulsas de nuevo la tecla, dash se convierta en true. Soy novato, pero creo que podría funcionar.

Por chachon2

41 de clabLevel



 

chrome

 

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