Home » AS2 »AS3 »Avanzado »Class »Noticias »Trucos »Tutoriales » Currently Reading:

Añadir funciones al teclado con Actionscript 3

abril 21, 2008 AS2, AS3, Avanzado, Class, Noticias, Trucos, Tutoriales 7 Comments
Añadir funciones al teclado con Actionscript 3

Esta es una sencilla clase que nos permitirá de forma fácil añadir la ejecución de una función al presionar una determinada tecla del teclado.

para ello crearemos una clase “Teclado” y la colocaremos en nuestro package de clases de actionscript 3.

La clase la extenderemos de EventDispatcher para poder lanzar eventos desde ella, y la escribiremos siguiendo un patrón Singleton ya que solo nos interesa tener un único controlador del teclado y queremos tener acceso global a él.

  1. package com.zguillez.events
  2. {
  3. public class Teclado extends EventDispatcher
  4. {
  5. public static  var _instancia:Teclado;
  6. //-------------------------------------------
  7. public function Teclado(s:Singleton,clip) {}
  8. //-------------------------------------------
  9. public static function getInstancia(clip:MovieClip):Teclado
  10. {
  11. if (_instancia == null)
  12. {
  13. _instancia = new Teclado(new Singleton(),clip);
  14. }
  15. return _instancia;
  16. }
  17. //-------------------------------------------
  18. }
  19. }
  20. //-----------------------------------------
  21. class Singleton {}

En la función getInstancia que es la que nos creará la instancia de la clase y nos dará acceso global a ella le pasaremos como parámetro el clip al que asignaremos el listener para el teclado. Ese clip lo registraremos en el constructor de la clase de igual manera que crearemos dos arrays uno para guardar las teclas a las que hemos asignado una función y otro para guardar referencia a esas funciones.

  1. public function Teclado(s:Singleton,clip)
  2. {
  3. _clip = clip;
  4. _funciones = new Array();
  5. _teclas = new Array();
  6. _clip.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
  7. }

Ahora crearemos una función publica con la que registraremos las teclas con sus respectivas funciones a ejecutar.

  1. public function addTecla(n:uint, f:Function):void
  2. {
  3. _teclas.push(n);
  4. _funciones.push(f);
  5. }

Solo nos queda escribir la función onKeyDown que es la que se ejecuará al presionar una tecla del teclado. Esta función comprobará si la tecla presionada está dentro de la lista de teclas con una función asignada, y de ser así ejecutará dicha función.

  1. private function onKeyDown(tecla:KeyboardEvent):void
  2. {
  3. var total:uint = _teclas.length
  4. if (total > 0) {
  5. for (var i:uint = 0; i < total ; i++) {
  6. if (tecla.keyCode == _teclas[i])
  7. {
  8. _funciones[i](tecla.keyCode);
  9. }
  10. }
  11. }
  12. _tecla = tecla.keyCode;
  13. dispatchEvent(new Event(Teclado.KEY_PRESS));
  14. }

De más a más, Le añadiremos un dispatchEvent por si nos interesase detectar desde fuera de la clase el hecho de haber presionado una tecla. En la variable _tecla guaremos referncia del código de la última tecla presionada para acceder a ella al escuchar el dispatch. Deberemos crearnos un getter para esa variable.

Para utilizar esta clase, en nuestra pelicula FLA colocaremos esto:

  1. import com.zguillez.events.Teclado;
  2.  
  3. var teclado:Teclado = Teclado.getInstancia(this);
  4. teclado.addTecla(70,traceTecla);
  5. teclado.addTecla(71,traceTecla);
  6. teclado.addTecla(72,traceTecla);
  7.  
  8. function traceTecla(keycode)
  9. {
  10. trace("Presioné la tecla " + keycode);
  11. }

Con esto haremos que al presionar la tecla con los keyCodes 70, 71 y 72 (las teclas F,G y H) se ejecute la función traceTecla (aunque podíamos haber asignado una función diferente a cada tecla).

Hay que fijarse que las funciones que queramos asignar han de recibir como parámetro el keyCode de la tecla (esto lo podemos omitir al ejecutar la función desde la clase, pero siempre va bien saber el keyCode que te ejecuta la función, sobretodo en funciones que son ejecutadas por varias teclas como en este caso).

Así que la clase completa queda asi:

  1. package com.zguillez.events
  2. {
  3. import flash.display.Stage;
  4. import flash.display.MovieClip;
  5. import flash.events.Event;
  6. import flash.events.KeyboardEvent;
  7. import flash.events.EventDispatcher;
  8. //-------------------------------------------
  9. public class Teclado extends EventDispatcher
  10. {
  11. public static  var _instancia:Teclado;
  12. public static  var KEY_PRESS:String = "onKeyPress";
  13. private var _clip:MovieClip;
  14. private var _funciones:Array;
  15. private var _teclas:Array;
  16. private var _tecla:uint;
  17. //-------------------------------------------
  18. public function Teclado(s:Singleton,clip)
  19. {
  20. _clip = clip;
  21. _funciones = new Array();
  22. _teclas = new Array();
  23. _clip.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
  24. }
  25. //-------------------------------------------
  26. public static function getInstancia(clip:MovieClip):Teclado
  27. {
  28. if (_instancia == null) {
  29. _instancia = new Teclado(new Singleton(),clip);
  30. }
  31. return _instancia;
  32. }
  33. //-----------------------------------------
  34. public function addTecla(n:uint, f:Function):void
  35. {
  36. _teclas.push(n);
  37. _funciones.push(f);
  38. }
  39. //-------------------------------------------
  40. private function onKeyDown(tecla:KeyboardEvent):void
  41. {
  42. var total:uint = _teclas.length
  43. if (total > 0) {
  44. for (var i:uint = 0; i < total ; i++) {
  45. if (tecla.keyCode == _teclas[i])
  46. {
  47. _funciones[i](tecla.keyCode);
  48. }
  49. }
  50. }
  51. _tecla = tecla.keyCode;
  52. dispatchEvent(new Event(Teclado.KEY_PRESS));
  53. }
  54. //-------------------------------------------
  55. public function get tecla():uint
  56. {
  57. return _tecla;
  58. }
  59. //-------------------------------------------
  60. }
  61. }
  62. //-----------------------------------------
  63. class Singleton
  64. {
  65. }

Compártelo:

Añadir funciones al teclado con Actionscript 3
Visto 22.815 veces

Currently there are "7 comments" on this Article:

  1. HernanRivas dice:

    También se podría usar un diccionario para relacionar las teclas con la función que ejecutan.

  2. Xavier dice:

    Podrías mostrar como con 1 diccionario ??

  3. Rafeo dice:

    Que bien, de nuevo arriba tu blog :D.

  4. fernando dice:

    buff…me salvas de una buena, iba contra reloj….tu clase me ha salvado el pellejo 😀

    un saludo

    p.d.: soy ‘novato’ en AS3 y pierdo muuucho tiempo todavia con algunas cosas demasiado basicas

  5. laura dice:

    muy buen comenterio pero tiene siertas cosas tontas

  6. EDGAR dice:

    ES MUY BUENA

  7. jas dice:

    saludos.

    tengo una consulta, e estado desarrollando el codigo del menu en actionscript 2 y en actionsrcipt 3, pero ninguno me da como respuesta los ejemplos que muestras.

    en actionscript 3 me dice que la variable Boton no ha sido definida. me puedes ayudar por favor.

    Gracias

Comment on this Article:








Twitter: zguillez

AdvertisementAdvertisementAdvertisementAdvertisement

Recibe las novedades por email



Map

Ranking

Codigoactionscript.org: 4.65 sobre 5 (106 valoraciones)

twitter-widget.com