Comunidad de diseño web y desarrollo en internet online

Detectar teclas precionadas

Citar            
MensajeEscrito el 25 Abr 2009 12:34 pm
hola amigos estoy creando un juego en as3 y me he topado con un problema,

bueno la cuestión es que utilizo KeyboardEvent para detectar si un letra es presionada dirige la nave dependiendo de su keyCode, hasta ahí todo perfecto, la cuestión es que que si presiono simultáneamente otra tecla deja de funcionar la que se mantiene presionada , haciendo algunos arreglos he solventado el problema parcialmente, pero se complica a la hora de disparar ya que el juego es de naves, mientras se esta disparando al presionar de adelante o taras deja de disparar y viceversa, así que no quiero hacer mas arreglos porque cada ves el código se vuelve lento en reaccionar XDXDXD dicho esto la pregunta mas sencilla es como saber si una tecla aun se mantiene presionada ?

Por Lynxcraft

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Abr 2009 02:03 pm
Puedes setear un flag en el keyDown, quitarlo en el keyUp, chequear su status cuando le das a otra tecla

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Abr 2009 03:40 pm
Gracias por responder,

lo que sugieres es lo que estoy haciendo actualmente para el control de movimiento, pero aun asi sigue entrando en conflicto con las letras ya presionadas, es decir que si quieres echarle un vistazo el codigo lo tengo de momento asi

Código :

import cfx.FixMovie.Desplazar;
import flash.events.KeyboardEvent;
var des:Desplazar=new Desplazar();
var dir:Number;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
var velt =10;
var vela:Boolean=false
var vel=0
var disparosAct:Boolean=false
var activado:Boolean=false;
var tecla:Number=0;
var direspera:Number=0;

function pas(event:Event):void {
   
   if (vela){
      vel+=1
      if(vel>velt)
      vel=velt
   }else{
      vel-=0.5
      if(vel<0){
         vel=0
      }
      
   }
   des.DirDesplazar(nave,dir,vel);
}
addEventListener(Event.ENTER_FRAME,pas);

function keyDownHandler(event:KeyboardEvent):void {
   if( event.keyCode ==32&& !disparosAct){
      disparo ()
      disparosAct=true
      return
   }
   vela=true;
   if (activado) {
   } else {
      switch (event.keyCode) {
         case 87 :
            dir=1;
            activado=true;
            tecla=event.keyCode;
            break;
         case 68 :
            dir=3;
            activado=true;
            tecla=event.keyCode;
            //des.DirDesplazar(nave,dir,5);
            break;
         case 83 :
            dir=5;
            activado=true;
            tecla=event.keyCode;
            //des.DirDesplazar(nave,dir,5);
            break;
         case 65 :
            dir=7;
            activado=true;
            tecla=event.keyCode;
            //des.DirDesplazar(nave,dir,5);
            break;
      }
   }
   if (activado && tecla!=event.keyCode) {
      switch (event.keyCode) {
         case 87 ://arriba
            if (tecla==68) {
               dir=2;
               return;
            }
            if (tecla==65) {
               dir=8;
               return;
            }
            break;
         case 68 ://derecha
            if (tecla==87) {
               dir=2;
               return;
            }
            if (tecla==83) {
               dir=4;
               return;
            }
            break;
         case 83 ://abajo
            if (tecla==68) {
               dir=4;
               return;
            }
            if (tecla==65) {
               dir=6;
               return;
            }
            break;
         case 65 ://isquierda
            if (tecla==83) {
               dir=6;
               return;
            }
            if (tecla==87) {
               dir=8;
               return;
            }
            break;
      }
      return;
   }
}
function keyUpHandler(event:KeyboardEvent):void {
   if( event.keyCode ==32){
      disparosAct=false
      return
   }
   if (tecla==event.keyCode) {
      activado=false;
      vela=false
      return
   }
   switch (tecla) {
      case 87 :
         dir=1;
         return;
         break;
      case 68 :
         dir=3;
         return;
         break;
      case 83 :
         dir=5;
         return;
         break;
      case 65 :
         dir=7;
         return;
         break;
   }
}

function disparo ():void{
   var b=nuevaBala(bala)
   b.addEventListener(Event.ENTER_FRAME,elimina)
   b.x=nave.x
   b.y=nave.y
   addChild(b)
}
function elimina( event:Event ):void {
         var mc =event.target;
         mc.x+=15
         if ( mc.x > 800 ) {
            mc.removeEventListener( Event.ENTER_FRAME, elimina );
            addChild(mc)
            removeChild(mc);
         }
      }
function nuevaBala(tipo:Object):Object{
   return new tipo()
}

Por Lynxcraft

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Abr 2009 06:06 pm
Solucionado XDXDXDXD

Por Lynxcraft

33 de clabLevel



 

firefox

 

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