package { import flash.display.MovieClip; import flash.events.Event; import flash.events.KeyboardEvent; public class KeyMgr { var target:MovieClip; //キーリスナ var keyFlags:Array = new Array(); //キー状態格納配列 function KeyMgr(target:MovieClip) { this.target = target; this.target.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); this.target.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); this.target.stage.addEventListener(Event.DEACTIVATE, onDeActive); } //キー状態を調べる public function isDown(keyCode:uint):Boolean { return keyFlags[keyCode]; } //イベントリスナーとリスナ参照を解除 public function deleteListener():void { target.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); target.stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp); target = null; } //キーが押された function onKeyDown(event:KeyboardEvent):void { keyFlags[event.keyCode] = true; } //キーが離された function onKeyUp(event:KeyboardEvent):void { keyFlags[event.keyCode] = false; } //Flashがフォーカスを失った function onDeActive(event:Event):void { //全フラグ解除 keyFlags.map(releaseAllFlags); } function releaseAllFlags(element:*, index:int, arr:Array) { arr[index] = false; } } }