チェンジセット 1618
- コミット日時:
- 2008/10/14 21:37:59 (3 ヶ月前)
- ファイル:
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
mxp/specialbutton/as3/src/n_mattun/keyAssist/ShortCutListener.as
r1614 r1618 12 12 public class ShortCutListener{ 13 13 14 public var __target :MovieClip;15 public var __shortCutKey :String = "";16 14 public var __handlerPath :MovieClip; 17 15 public var __handlerName :String = ""; 16 public var __shortCutKey :String = ""; 18 17 public var __type :String = "up"; 19 18 public var __delay :uint = 0; … … 33 32 public var doubleDownTimer :Timer; 34 33 public var doubleUpTimer :Timer; 35 public var continueTimer:Timer;34 public var repeatTimer :Timer; 36 35 37 36 //発動済かどうかのチェック 38 37 public var executedList :Object = new Object(); 39 //continue時に対象のボタンが押されてるかどうかを見る 40 public var continueDown :Boolean = false; 41 42 public function ShortCutListener(...Args:Array){ 38 //repeat時に対象のボタンが押されてるかどうかを見る 39 public var repeatDown :Boolean = false; 40 41 //コンストラクタ(引数いっぱいあるよ。_delay以降はデフォルト引数だよ) 42 public function ShortCutListener( 43 _handlerPath:MovieClip, 44 _handlerName:String, 45 _shortCutKey:String, 46 _type :String, 47 _delay :Number = 0, 48 _interval :Number = 0, 49 _enabled :Boolean = true 50 ){ 43 51 //コンストラクタ引数をセット 44 var i:Number; 45 for(i = 0;i<Args.length;i++){ 46 switch(i){ 47 case 0: __target = Args[i];break; 48 case 1: __shortCutKey = Args[i];break; 49 case 2: __handlerPath = Args[i];break; 50 case 3: __handlerName = Args[i];break; 51 case 4: __type = Args[i];break; 52 case 5: __delay = Args[i];break; 53 case 6: __interval = Args[i];break; 54 case 8: __enabled = Args[i];break; 55 } 56 } 52 __handlerPath = _handlerPath; 53 __handlerName = _handlerName; 54 __shortCutKey = _shortCutKey; 55 __type = _type; 56 __delay = _delay; 57 __interval = _interval; 58 __enabled = _enabled; 57 59 58 60 //idDown検知ハンドラを発動させておく 59 kl = new KeyDownListener(__target); 60 61 kl = new KeyDownListener(__handlerPath); 61 62 if(__enabled){ 62 __target.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 63 __target.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 63 //__handlerPathを借りてstageオブジェクトを参照してイベントリスナーをセット。 64 __handlerPath.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 65 __handlerPath.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 64 66 } 65 67 66 68 executedList.down = false; 67 executedList. cont= false;69 executedList.repeat = false; 68 70 executedList.double = false; 69 71 //executedList.up = false; … … 106 108 public function set interval(_num:uint):void{ 107 109 __interval = _num; 108 if(_num != 0) continueTimer.delay = _num;110 if(_num != 0) repeatTimer.delay = _num; 109 111 } 110 112 // -------------------------------------------------------------------// … … 112 114 if(__enabled != _bool){ 113 115 if(_bool){ 114 __ target.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);115 __ target.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);116 __handlerPath.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 117 __handlerPath.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 116 118 }else{ 117 __ target.stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);118 __ target.stage.removeEventListener(KeyboardEvent.KEY_UP, keyUpHandler);119 __handlerPath.stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 120 __handlerPath.stage.removeEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 119 121 } 120 122 } … … 122 124 kl.enabled = _bool; 123 125 } 126 // -------------------------------------------------------------------// 127 public function set handlerArgs(..._Args:Array):void{ 128 __handlerArgs = new Array(); 129 var i:Number; 130 for(i = 0;i < _Args.length;i++){ 131 __handlerArgs[i] = _Args[i]; 132 } 133 } 124 134 // ===================================================================// 125 135 // getter … … 151 161 public function get enabled():Boolean{ 152 162 return __enabled; 163 } 164 // -------------------------------------------------------------------// 165 public function get handlerArgs():Array{ 166 return __handlerArgs; 153 167 } 154 168 // ===================================================================// … … 173 187 } 174 188 break; 175 case " continue":189 case "repeat": 176 190 //down押しっぱの連続検知を避ける 177 if(executedList. cont == false){178 executedList. cont = true;179 continueDown = true;191 if(executedList.repeat == false){ 192 executedList.repeat = true; 193 repeatDown = true; 180 194 if(delay > 0){ 181 195 isDelaying = true; … … 218 232 executedList.down = false; 219 233 break; 220 case " continue":221 continueTimer.stop();//実行ストップ222 executedList. cont = false;223 continueDown= false;234 case "repeat": 235 repeatTimer.stop();//実行ストップ 236 executedList.repeat = false; 237 repeatDown = false; 224 238 break; 225 239 case "double": … … 241 255 //待機が終わったら発動するハンドラ 242 256 private function complateDelayHandler(e:*):void{ 243 //続けて実行の場合はここで continueTimerを起動しておく244 if(__type == " continue"){245 // continue対象のボタンが押されてる時のみ実行246 if( continueDown == true) continueTimer.start();257 //続けて実行の場合はここでrepeatTimerを起動しておく 258 if(__type == "repeat"){ 259 //repeat対象のボタンが押されてる時のみ実行 260 if(repeatDown == true) repeatTimer.start(); 247 261 }else{ 248 262 //ハンドラ実行 … … 272 286 case "up": 273 287 case "down": 274 case " continue":288 case "repeat": 275 289 //通常の場合は既存のセットした引数を突っ込んで順次ハンドラ発動 276 290 switch(args.length){ … … 361 375 doubleUpTimer.stop(); 362 376 363 continueTimer = new Timer(__interval,0);364 continueTimer.addEventListener(TimerEvent.TIMER, commmitHandler);365 continueTimer.stop();377 repeatTimer = new Timer(__interval,0); 378 repeatTimer.addEventListener(TimerEvent.TIMER, commmitHandler); 379 repeatTimer.stop(); 366 380 367 381 }
