Código ActionScript :
package com.senocular.utils { import flash.display.Stage; import flash.events.KeyboardEvent; import flash.ui.Keyboard; //La clase Proxy permite anular el comportamiento predeterminado // de las operaciones de ActionScript.(por ejemplo, la recuperación // o modificación de propiedades) de un objeto. //La clase Proxy no tiene ningún constructor; no se debe intentar //crear una instancia de Proxy. Por el contrario, //se debe crear una subclase de la clase Proxy para anular métodos //como getProperty y presentar un comportamiento personalizado. //Si intenta utilizar un método de la clase Proxy sin anular el método, // se emitirá una excepción. //La clase Proxy es una sustitución de las funciones Object.__resolve y //Object.addProperty de ActionScript 2.0, que ya no están disponibles // en ActionScript 3.0. La función Object.addProperty() permitía crear //dinámicamente métodos get y set en ActionScript 2.0. //Aunque ActionScript 3.0 proporciona métodos get y set en tiempo de //compilación, no es posible asignarlos dinámicamente a un objeto //a no ser que se utilice la clase Proxy. import flash.utils.Proxy; //Para evitar interferencias con el espacio de nombres public, los //métodos de la clase Proxy se encuentran en el espacio de nombres //flash_proxy. import flash.utils.flash_proxy; //una clase dinámica es aquella que puede ser modificada, tanto sus //propiedades como métodos, en tiempo de ejecución. dynamic public class KeyObject extends Proxy { //Las variables estáticas, que se asocian a una clase en lugar //de a una instancia de una clase, son útiles para almacenar //y compartir información que se aplica a toda una clase de objetos. //Por ejemplo, una variable estática es adecuada si se desea //almacenar un recuento del número de veces que se crea una //instancia de una clase o si se desea almacenar el número máximo //de instancias de la clase permitidas. private static var stage:Stage; //La clase Object se encuentra en la raíz de la jerarquía de clases de //ActionScript. Los objetos se crean mediante constructores, //empleando la sintaxis de operador new, y se le pueden asignar //propiedades dinámicamente. Los objetos también pueden //crearse mediante la asignación de un literal de objeto private static var keysDown:Object; public function KeyObject(stage:Stage) { construct(stage); } public function construct(stage:Stage):void { KeyObject.stage = stage; keysDown = new Object(); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); //eventSource.addEventListener(EventType.EVENT_NAME, eventResponse); stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased); } //Apartir de acá para abajo me trabé // ¿Qué hace este método? - ¿Qué es override? flash_proxy override function getProperty(name:*):* { return (name in Keyboard) ? Keyboard[name] : -1; } public function isDown(keyCode:uint):Boolean { return Boolean(keyCode in keysDown); } public function deconstruct():void { stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed); stage.removeEventListener(KeyboardEvent.KEY_UP, keyReleased); keysDown = new Object(); KeyObject.stage = null; } private function keyPressed(evt:KeyboardEvent):void { keysDown[evt.keyCode] = true; } private function keyReleased(evt:KeyboardEvent):void { delete keysDown[evt.keyCode]; } } }