miércoles, 9 de abril de 2008

10) Entradas 2da Parte (Teclado - Clase KeyManager) ...

Ya hemos definido a nuestra clase, ahora llevaremos a cabo su implementación, en este caso, es muy simple seguir el código, así que ahí va directamente:
/**
* ...
* @author Wal
* @version 0.9
* @since 2008-04-02
* @link http://www.tenemos.info
*/

package MisClases {
// importamos el soporte de eventos y de los componentes
// principales de Flex
import flash.events.*;
import mx.core.*;
// definimos la clase KeyManager
public class KeyManager extends UIComponent {
// definimos y publicamos las propiedades que indican
// los estados de cada tecla
public var up: Boolean = false;
public var down: Boolean = false;
public var left: Boolean = false;
public var right: Boolean = false;
public var space: Boolean = false;
public var zKey: Boolean = false;
public var xKey: Boolean = false;
public var cKey: Boolean = false;
// en el constructor, nos "colgamos" de los eventos
// KEY_UP y KEY_DOWN del
// contenedor recibido como parámetro (aParent)
// asociándolos a las funciones
// de la clase keyDown y keyUp respectivamente
public function KeyManager(aParent:UIComponent) {
aParent.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
aParent.addEventListener(KeyboardEvent.KEY_UP, keyUp);
}
// definimos los casos del evento KEY_DOWN del contenedor
private function keyDown(event:KeyboardEvent):void {
switch (event.keyCode) {
case 37 :
left = true;
break;
case 38 :
up = true;
break;
case 39 :
right = true;
break;
case 40 :
down = true;
break;
case 32 :
space = true;
break;
case 90 :
zKey = true;
break;
case 88 :
xKey = true;
break;
case 67 :
cKey = true;
}
}
// definimos los casos del evento KEY_UP del contenedor
private function keyUp(event:KeyboardEvent):void {
switch (event.keyCode) {
case 37 :
left = false;
break;
case 38 :
up = false;
break;
case 39 :
right = false;
break;
case 40 :
down = false;
break;
case 32 :
space = false;
break;
case 90 :
zKey = false;
break;
case 88 :
xKey = false;
break;
case 67 :
cKey = false;
}
}
}
}
/** Fin de la clase KeyManager **/

Luego veremos cómo utilizar esta clase en un programa de prueba. Sin embargo, ya pueden ir observando las posibilidades y limitaciones que tiene esta clase. Supongamos que queremos utilizarla en un juego donde tenemos un actor que se va desplazando por la pantalla. En este caso, no tendremos ningún inconveniente en utilizarla, hasta podremos tomar distintas decisiones si hay más de una tecla pulsada (por ejemplo, girar en diagonal). Sin embargo, seguramente aplicar esta clase a un juego tipo Simon (seguir las 4 luces de colores en una secuencia), no sería lo más apropiado. En éste último caso, conviene hacer uso de los eventos (podría ser KEY_UP o KEY_DOWN indistintamente en forma directa.