指定MCにダブルクリック通知機能を実装するクラス(setInterval版)
昨日作ったダブルクリック通知機能を実装するクラスのタイマー部分はsetInterval用いたら一行ですむことに気付き改変。MovieClip.getNextHigthestDepth()を用いないので深度管理の心配も無し。
問題がなければ タイマー関連はsetIntervalを用いたほうがよさそうですね。(setIntervalは設定した時間で画面が強制的に描画されてしまうのでしたっけ?)
ソース(tab:4,line:80で作成)→【 DoubleClick.as.2.txt 】
/* 指定MCにダブルクリック通知機能を実装するクラス */ class DoubleClick{ /* フィールド */ //通知用 public var one :Function; //シングルクリック時に実行される処理 public var double:Function; //ダブルクリック成功時に実行される処理 //処理用 private var targetMC:MovieClip; private var timerID :Number; private var INTERVAL:Number = 500;//ダブルクリック間隔( ミリ秒 ) /* コンストラクタ */ public function DoubleClick( targetMC:MovieClip ){ //フィールド設定 this.targetMC = targetMC; //クリックされた場合の処理定義 this.targetMC[ "scope" ] = this; this.targetMC.onPress = this.click; } /* 対象MCがクリックされた場合の処理定義 */ private function click():Void{ //パス設定 this = this[ "scope" ]; var scope:DoubleClick = this; //シングルクリックされたことを通知 this.one( { mc:this.targetMC } ); //ダブルクリック時の処理定義 this.targetMC.onPress = function(){ scope.end( scope ); scope.double( { mc:scope.targetMC } ); //ダブルクリック成功を通知 }; //タイマー開始 this.timerID = setInterval( end, this.INTERVAL, this ); } /* 破棄処理 */ private function end( scope:DoubleClick ):Void{ scope.targetMC.onPress = scope.click; //クリック時の処理 書き換え clearInterval( scope.timerID ); //ループ処理終了 } }
使用例は前と同じです。
【 swf例 】
0.5秒以内にクリックが二度されるとダブルクリックと判定しています。
レッツ・クリック!
はじめまして、いつもコッソリ覗かせて頂いております
クリック時に、前回クリック時からの差を利用して
ダブルクリックかどうかの判別をする手法もありかと(・∀・b
-------------------------------------
// ダブルクリック有効時間
private var holdTime:Number;
/* 対象MCがクリックされた場合の処理定義 */
private function click():Void{
//パス設定
this = this[ "scope" ];
var scope:DoubleClick = this;
// ダブルクリック有効時間内?
if(getTimer() < this.holdTime){
scope.double( { mc:scope.targetMC } )
// 次のクリックはダブルクリックじゃないヨ。
this.holdTime = getTimer()-1;
}else{
// シングルクリック処理
this.one( { mc:this.targetMC } );
// ダブルクリック有効時間を設定
this.holdTime = getTimer()+this.INTERVAL;
}
}
実際動かしてないのでエラーでるかもですがorz
投稿者 ise(QuR)age : 2005年04月18日 15:41