ActionScript: 2007年2月アーカイブ

2月5日のblogにて、ActionScript2.0でのダブルクリックについて書きました(3.0よりダブルクリックをイベントとして受け取れるようです)。
その際に書いたものは、ダブルクリックを検知する前に必ず、普通のクリックも検知してしまうというものでした。
今回紹介するのは、普通のクリックとダブルクリックを分けて検知するスクリプトの紹介です。
ある一定時間以内に二度クリックされた場合はダブルクリック、一度だった場合は普通のクリックと判断します。

クリック検出関数内にて、setInterval関数を使用し、ある一定時間後に別の関数を呼び出す定義をします。この際、クリック回数を1としておきます。
一定時間内に再度クリックがあった場合には、クリック回数を増やします。
setInterval関数にて呼び出しを定義された関数内で、クリック回数を元に処理を分岐します。
以下、そのスクリプトです。

//スクリプトここから(ダブルクリック検知2)
var duration:Number=100;//ダブルクリック時間定数msec
var clickN:Number=0;//クリック回数
clickA.onPress=clickSD;//clickAはクリックを検出したいインスタンス名
var intervalId:Number;

function clickSD2():Void{
if(clickN==1){
//一回だけのクリック処理
}
else if(clickN>1){
//ダブルクリック処理
}
clearInterval(intervalId);//間隔をクリアする
clickN=0;//クリック回数を0に戻す
}

function clickSD():Void{
//durationにて設定した時間後にclickSD2関数呼び出し
if(clickN==0)intervalId = setInterval(_root, "clickSD2", duration);
//クリック回数を増やす
clickN+=1;
}
//スクリプトここまで(ダブルクリック検知2)

もしももっと簡易なスクリプトがございましたら、ぜひ教えていただきたいです。

質問がありましたら質問掲示板にどうぞ。素材のスクリプトについての質問も技術的な指摘もお待ちしています。

Wikipedia ActionScript

Flashではマウスクリックをイベントとしてキャッチことができます。
ただし、ダブルクリックを受け取るというイベントが用意されていません(ActionScript3.0では新たに加わるようです)。

つい先日アップしたFlash素材image10ではダブルクリックと普通のクリックで動作を変えています。
その仕組みについてお話いたします。

まず、ダブルクリックのイベントキャッチを実現する際、最初に思いつくのは、以下のようなアルゴリズムです。

1.クリック時に現在時間を取得する
2.クリック時、取得済みの時間と現在時間との差異によって条件分岐する
たとえば、差異が100ms未満ならダブルクリック、100ms以上なら普通のクリックと判断する。

スクリプトは以下のようになります。

//スクリプトここから(ダブルクリック検知)
var duration:Number=100;//ダブルクリック時間定数msec
var countN:Number=0;//時間取得
clickA.onPress=clickSD;//clickAはクリックを検出したいインスタンス名

//クリック検知用の関数。
function clickSD():Void{
if(getTimer()-countN<duration){
//ダブルクリック処理
}
else{
//一回だけのクリック処理
}
countN=getTimer();
}
//スクリプトここまで(ダブルクリック検知)

これで確かにダブルクリックを検知できますが、一つ欠点がございます。
それは「ダブルクリックの処理をする前に必ず普通のクリックの処理を行ってしまう」というものです。
ということで、その欠点を解消するスクリプトを考えました。配布した素材には解消後のスクリプトを使用しています。
そのスクリプトについてはまた近日中に掲載します。

質問がありましたら質問掲示板にどうぞ。素材のスクリプトについての質問も技術的な指摘もお待ちしています。

Wikipedia ActionScript

1

概要

青春B運営メンバー多口カタンによる雑記blogです。
自己紹介はこちら。開発物をまとめたものはこちら
 
ヘッダーイラストはkojiさん制作です。
感想・意見・要望等ありましたら気軽にフォームにてコンタクトくださいませ。
 
Twitterはじめましたので誰でも気軽に声かけてくださいね。