Comunidad de diseño web y desarrollo en internet online

Mejorar interacción teclado en AS3

Citar            
MensajeEscrito el 06 Nov 2007 04:33 pm
Hola a todos. No sé si ya han hablado al respecto en el foro, pero necesito mejorar la respuesta del teclado en ActionScript 3.0

A ver, en AS2 teníamos un evento onKeyDown, pero generalmente no lo utilizaba porque dependía mucho de la velocidad de repetición del teclado. Entonces usaba el onEnterFrame, que mejoraba en gran medida la respuesta, algo como esto:

Código :

_root.onEnterFrame = function(){ 
if (Key.isDown(Key.UP)){ 
persona._x -= 15; 
} 
etc...
}


Ahora en AS3 tenemos algo como esto:

Código :

stage.addEventListener(KeyboardEvent.KEY_DOWN, mover);
...
public function mover(evento:KeyboardEvent):void{
switch(evento.keyCode){
case Keyboard.UP : 
  y -= 15;
...
}
}


Pero igual hay una demora en la respuesta por la velocidad de repetición del teclado... mi pregunta es si se puede hacer algo parecido a lo que hacíamos en AS2, cuando aprovechábamos el evento onEnterFrame.

Gracias de antemano.

Por ExGaul

Claber

180 de clabLevel



Genero:Masculino  

Cereté - Colombia

firefox
Citar            
MensajeEscrito el 06 Nov 2007 07:53 pm
pues no se que tan rapido oprimas la tecla del raton, pero al menos la prueba que yo hice en base a tu código, da buena respuesta:

Código :

var a:Number = 0;
stage.addEventListener(KeyboardEvent.KEY_DOWN, mover);
function mover(evento:KeyboardEvent):void {
   switch(evento.keyCode){
      case Keyboard.UP:
         a++;
         trace(a.toString());
         break;
      case Keyboard.DOWN:
         a--;
         trace(a.toString());
         break;
   }
}

Ahora, con el Event.ENTER_FRAME, yo veo una respuesta muy similar, pero bueno

Código :

var a:Number = 0;
stage.addEventListener(Event.ENTER_FRAME, enter_frame);
function enter_frame(e:Event):void {
   stage.addEventListener(KeyboardEvent.KEY_DOWN, mover);
}
function mover(evento:KeyboardEvent):void {
   switch(evento.keyCode){
      case Keyboard.UP:
         a++;
         trace(a.toString());
         break;
      case Keyboard.DOWN:
         a--;
         trace(a.toString());
         break;
   }
}


Saludos! ^^

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 06 Nov 2007 08:37 pm
Bueno, voy a probar el último código que pusiste, pero la cosa está en que si quiero mover un personaje por el escenario con las teclas de flecha, el retraso en la velocidad de repetición me jode la vida... así me queda un personaje que primero empieza a mover las piernas y un segundo después empieza a avanzar... algo como las caricaturas, lo cual no está mal, pero no es lo que quiero.

Como dije, probaré tu código y te contaré.

Gracias.

Por ExGaul

Claber

180 de clabLevel



Genero:Masculino  

Cereté - Colombia

firefox
Citar            
MensajeEscrito el 11 Nov 2007 08:10 pm
En Kirupa hay una clase Key que emula el funcionamiento de nuestro amado KeyDown de AS1/AS2. Te recomendaría buscarla, la usé mucho y funciona a la perfección.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 14 Nov 2007 10:13 pm
Gracias HernanRivas, la buscaré a ver qué tal...

Saludos.

Por ExGaul

Claber

180 de clabLevel



Genero:Masculino  

Cereté - Colombia

firefox
Citar            
MensajeEscrito el 30 Dic 2007 12:28 am
Lo que yo hice fue separar el movimiento de la detección del teclado. Por ejemplo para el movimiento de mi nave quedaría asi:

Código :

var dir:Number;
var vel:Number = 10;
var coord:String;
//
stage.addEventListener(KeyboardEvent.KEY_DOWN, mover);
nave.addEventListener(Event.ENTER_FRAME, volar);
function volar(eve:Event):void
{
   eve.target[coord] += vel*dir;
}
function mover(eve:KeyboardEvent):void
{
   if (eve.keyCode == 37)
   {
      coord = "x";
      dir = -1;
   }
   if (eve.keyCode == 38)
   {
      coord = "y";
      dir = -1;
   }
   if (eve.keyCode == 39)
   {
      coord = "x";
      dir = 1;
   }
   if (eve.keyCode == 40)
   {
      coord = "y";
      dir = 1;
   }
}


¡¡¡Fácilmente lo vas a poder adaptar!!! Saludos desde Argentina

Por Egs!

0 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 17 Jun 2008 09:20 pm
Hola... Soy Novato en Flash y AS3 pero estoy luchando... he visto que soy muy bueno en AS3... sera que me podej iluminar por favor estoy haciendo un juego y quiero lo Siguiente:

Cuando presione la Tecla " C " que es igual a 10 Creditos funcione el Cuadro de texto Dinamico que tengo con el nombre Creditos... la verdad quiero que funcione de 100 en 100 ... por favor ayuda te agradezco de antemano....

Por mikeggg

3 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 07 Feb 2010 03:42 am
yo usaba algo como esto
function mover
{
if(keycode = Key.up)
{
up = true;
}
else
{up= false;}
function enterframe
{
if(up)
{monito.y -= 15;
}
{

Por zardilior

1 de clabLevel



 

msie8

 

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