チェンジセット 1618

差分発生行の前後
無視リスト:
コミット日時:
2008/10/14 21:37:59 (3 ヶ月前)
コミッタ:
n_mattun
ログメッセージ:

ハンドラ実行タイプ名"continue"を"repeat"に変更。あとコンストラクタ引数をいっこ減らした。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • mxp/specialbutton/as3/src/n_mattun/keyAssist/ShortCutListener.as

    r1614 r1618  
    1212        public class ShortCutListener{ 
    1313                 
    14                 public var __target                     :MovieClip; 
    15                 public var __shortCutKey        :String = ""; 
    1614                public var __handlerPath        :MovieClip; 
    1715                public var __handlerName        :String = ""; 
     16                public var __shortCutKey        :String = ""; 
    1817                public var __type                       :String = "up"; 
    1918                public var __delay                      :uint = 0; 
     
    3332                public var doubleDownTimer      :Timer; 
    3433                public var doubleUpTimer        :Timer; 
    35                 public var continueTimer      :Timer; 
     34                public var repeatTimer        :Timer; 
    3635                 
    3736                //発動済かどうかのチェック 
    3837                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                        ){ 
    4351                        //コンストラクタ引数をセット 
    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; 
    5759                         
    5860                        //idDown検知ハンドラを発動させておく 
    59                         kl = new KeyDownListener(__target); 
    60                          
     61                        kl = new KeyDownListener(__handlerPath); 
    6162                        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); 
    6466                        } 
    6567                         
    6668                        executedList.down     = false; 
    67                         executedList.cont     = false; 
     69                        executedList.repeat   = false; 
    6870                        executedList.double   = false; 
    6971                        //executedList.up     = false; 
     
    106108                public function set interval(_num:uint):void{ 
    107109                        __interval = _num; 
    108                         if(_num != 0) continueTimer.delay = _num; 
     110                        if(_num != 0) repeatTimer.delay = _num; 
    109111                } 
    110112                // -------------------------------------------------------------------// 
     
    112114                        if(__enabled != _bool){ 
    113115                                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); 
    116118                                }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); 
    119121                                } 
    120122                        } 
     
    122124                        kl.enabled = _bool; 
    123125                } 
     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                } 
    124134                // ===================================================================// 
    125135                // getter 
     
    151161                public function get enabled():Boolean{ 
    152162                        return __enabled; 
     163                } 
     164                // -------------------------------------------------------------------// 
     165                public function get handlerArgs():Array{ 
     166                        return __handlerArgs; 
    153167                } 
    154168                // ===================================================================// 
     
    173187                                                } 
    174188                                        break; 
    175                                         case "continue": 
     189                                        case "repeat": 
    176190                                                //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; 
    180194                                                        if(delay > 0){ 
    181195                                                                isDelaying = true; 
     
    218232                                                executedList.down = false; 
    219233                                        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; 
    224238                                        break; 
    225239                                        case "double": 
     
    241255                //待機が終わったら発動するハンドラ 
    242256                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(); 
    247261                        }else{ 
    248262                                //ハンドラ実行 
     
    272286                                case "up": 
    273287                                case "down": 
    274                                 case "continue": 
     288                                case "repeat": 
    275289                                        //通常の場合は既存のセットした引数を突っ込んで順次ハンドラ発動 
    276290                                        switch(args.length){ 
     
    361375                        doubleUpTimer.stop(); 
    362376                         
    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(); 
    366380                         
    367381                }