1

CLICKとDOUBLE_CLICKの両方を同じ表示オブジェクトに配置することはできませんか?ステージをダブルクリックすると新しいオブジェクトが追加され、ステージを1回クリックすると、選択したオブジェクトの選択が解除されるステージの両方を使用しようとしています。

DOUBLE_CLICKは、それ自体と、DOUBLE CLICKへのパスの最初のCLICK関数(マウスダウン、マウスアップ、クリック、マウスダウン、マウスアップ、ダブルクリック)の両方を実行するようです。

私がプログラムした他の言語では、2つを区別する組み込みのタイマーがありました。これはAS3では利用できませんか?


アップデート

ここにいくつかのコードがあります。基本的に私が欲しいのは、ダブルクリックで両方ではなく、どちらか一方を持っていることです

stage.doubleClickEnabled = true;
stage.addEventListener(MouseEvent.DOUBLE_CLICK, twoClicks, false, 0, true);
stage.addEventListener(MouseEvent.CLICK, oneClick, false, 0, true);

function oneClick(evt:MouseEvent):void
    {
    trace("One CLICK");
    }

function twoClicks(evt:MouseEvent):void
    {
    trace("Two CLICKS");
    }

//oneClick trace = "One CLICK"
//twoClicks trace = "One CLICK Two CLICKS" (instead of just Two CLICKS)
4

3 に答える 3

8

setTimeoutとを使用できますclearTimeout

次のようになります。

const var DOUBLE_CLICK_SPEED:int = 10;
var mouseTimeout;

function handleClick(evt:MouseEvent):void {
    if (mouseTimeout != undefined) {
        twoClicks();
        clearTimeout(mouseTimeout);
        mouseTimeout = undefined;
    } else {
        function handleSingleClick():void {
            oneClick();
            mouseTimeout = undefined;
        }
        mouseTimeout = setTimeout(handleSingleClick, DOUBLE_CLICK_SPEED);
    }
}

function oneClick(evt:MouseEvent):void {
    trace("One CLICK");
}

function twoClicks(evt:MouseEvent):void {
    trace("Two CLICKS");
}
stage.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
于 2010-04-11T03:30:13.400 に答える
5

.doubleClickEnabled真に設定しましたか?

こちらもご覧ください

于 2010-04-11T02:08:54.850 に答える
1

素晴らしい答え Wallacoloo - ありがとう。私はちょうどあなたのソリューションを実装し、いくつかのポイントを改良したので、将来の参考のためにここに置くと思いました(そしてもちろん、オーバーフローコミュニティの利益のために!)。まず、setTimeout によって返される uint で undefined をテストできなかったため、undefined 条件を == 0 条件に置き換えました。次に、シングル クリックのロジックを瞬時にコミットしたかったので (より快適なユーザー インターフェイスを作成するためだけに)、少し改造しました。

        if (mouseTimeout != 0) {
            // clicked within the timeout, handle as double click

            // rollback single click logic
            rollbackSingleClickHandler(e);
            // commit double click logic
            dblClickHandler(e);

            clearTimeOut(mouseTimeout);
            mouseTimeout = 0;
        } else {
            // first click of a click sequence

            // commit single click logic
            singleClickHandler(e); 

            function clearTime():void {
                mouseTimeout = 0;
            }

            // register a timeout for a potential double click
            mouseTimeout = setTimeout(clearTime, DOUBLE_CLICK_SPEED);
        }
于 2014-01-10T01:01:40.290 に答える