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

Problema con movimiento de teclado en AS3

Estas en el tema de Problema con movimiento de teclado en AS3 en el foro de Flash y Actionscript en Foros del Web. Pongo el swf y el código. Es una prueba que estoy haciendo. Los problemas son que para que responda al teclado primero hay que hacer ...
  #1 (permalink)  
Antiguo 18/07/2012, 01:54
 
Fecha de Ingreso: mayo-2011
Mensajes: 335
Antigüedad: 13 años, 6 meses
Puntos: 4
Problema con movimiento de teclado en AS3

Pongo el swf y el código.
Es una prueba que estoy haciendo. Los problemas son que para que responda al teclado primero hay que hacer un clic en el escenario y no debería ser así sino responder a la primera.
También sucede que si se desplaza derecha-izquierda y se quiere mover enseguida izquierda-derecha el movimiento resulta muy brusco, se para un segundo y no sé por qué.
¿Alguien puede ayudar en esto? muchas gracias.

http://img86.xooimage.com/files/9/8/...ds-366ef62.swf

import flash.events.KeyboardEvent;

stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPulsada);
function teclaPulsada(event:KeyboardEvent):void {
if (event.keyCode==Keyboard.UP) { nave.y-=55 }
if (event.keyCode==Keyboard.DOWN) { nave.y+=55 }
if (event.keyCode==Keyboard.LEFT) { nave.x-=55 }
if (event.keyCode==Keyboard.RIGHT) { nave.x+=55}



}
  #2 (permalink)  
Antiguo 19/07/2012, 05:20
Avatar de sephirot47  
Fecha de Ingreso: marzo-2011
Ubicación: BCN
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Problema con movimiento de teclado en AS3

Vale a ver si me explico bien. Yo hago videojuegos en AS3, aunque soy un poco novato, y lo que siempre uso es un Timer que compruebe cuando las teclas están pulsadas. Respecto a lo de que el movimiento sea muy brusco es porque deberías usar aceleración. Mira:

Código Javascript:
Ver original
  1. var pup:Boolean, pdown:Boolean, pright:Boolean, pleft:Boolean; //corresponden al estado de cada tecla, si están pulsadas true, si no false
  2.  
  3. pup = pdown = pright = pleft = false;
  4.  
  5. var acc:Number = 0.5; //La aceleración, 0.5, por ejemplo
  6. var vx:Number = 0, vy:Number;
  7.  
  8. var timer:Timer = new Timer(25, 0); //Cada 25 ms se ejecutará la función moving
  9. timer.start();
  10. timer.addEventListener(TimerEvent.TIMER, moving);
  11.  
  12.  
  13. stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPulsada);
  14. stage.addEventListener(KeyboardEvent.KEY_UP, teclaSoltada);
  15.  
  16. function moving(e:TimerEvent):void
  17. {
  18.    if(pup)
  19.   {
  20.      vy -= acc;
  21.   }  
  22.   else if(pdown)
  23.   {
  24.      vy += acc;
  25.   }
  26.  
  27.   if(pright)
  28.   {
  29.      vx += acc;
  30.   }
  31.   else if(pleft)
  32.  {
  33.     vx -= acc;
  34.   }
  35.  
  36.   nave.x += vx;
  37.   nave.y += vy;
  38.  
  39. }
  40.  
  41. function teclaPulsada(event:KeyboardEvent):void
  42. {
  43.     switch(event.keyCode)
  44.    {
  45.          case Keyboard.UP:
  46.                  pup = true;
  47.                  break;
  48.          case Keyboard.DOWN:
  49.                  pdown = true;
  50.                  break;
  51.          case Keyboard.RIGHT:
  52.                  pright = true;
  53.                  break;
  54.          case Keyboard.LEFT:
  55.                  peft = true;
  56.                  break;
  57.    }
  58. }
  59.  
  60.  
  61. function teclasSoltada(event:KeyboardEvent):void
  62. {
  63.     switch(event.keyCode)
  64.    {
  65.          case Keyboard.UP:
  66.                  pup = false;
  67.                  break;
  68.          case Keyboard.DOWN:
  69.                  pdown = false;
  70.                  break;
  71.          case Keyboard.RIGHT:
  72.                  pright = false;
  73.                  break;
  74.          case Keyboard.LEFT:
  75.                  peft = false;
  76.                  break;
  77.    }
  78. }

Ese codigo debería funcionar, si te da algún error dímelo. Eso sí, creo que deberías aprender más programación, porque solo ese trozo de código me dice que no llevas mucho programando. Lo más apropiado en la función es usar un switch. No quieras aprender demasiado rápido ;) Espero que funcione.
__________________
Todo lo que tiene un inicio tiene un final inevitable...

¡ No olvides darme karma si te fui útil ^^ !

Última edición por sephirot47; 19/07/2012 a las 05:26

Etiquetas: as3, flash, movimiento, swf, teclado
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 13:33.